본문 바로가기

Programming

D-Bus (Desktop Bus)

D-Bus (Desktop bus)

 

Introduction


같은 머신에서 동시에 실행 중인 여러 컴퓨터 프로그램(프로세스)간의 통신을 가능케 하는 소프트웨어 버스, 프로세스간 통신(IPC: Inter-Process Communication), 원격 프로시저 호출(RPC: Remote Procedure Call) 매커니즘이다.


Red Hat의 하복 페닝턴(Havoc Pennington)이 GNOME(GNU Network Object Model Environment), KDE등의 Linux Desktop 환경이 제공하는 서비스들을  표준화하기 위해 발의된 Freedesktop.org 프로젝트의 일부로 개발되었다.

 

Freedesktop.org 프로젝트는 사양의 레퍼런스로 libdbus라는 이름의 오픈소스 라이브러리를 개발하였다. 이 라이브러리는 D-Bus와는 구별되고, 실제로 다른 D-Bus 클라이언트 라이브러리 들도 존재한다.

GDBus(GNOME), QtDBus(Qt/KDE), dbus-java, sd-bus 등이 있다.

 

libdbus

D-Bus의 많은 구현들 중 가장널리 사용되는 버스로 Freedesktop.org 프로젝트에서 개발되었다. 하지만 libdbus의 낮은 수준의 구현으로 어플리케이션 개발자들로 하여금 직접 사용하기 보다는 참조하여 재구현하기를 권장한다.

 

GBus

GTK+와 GNOME에서 사용할 목적으로 GLib에 내부의 GIO Stream을 기반으로 구현된 D-Bus이다. libdbus를 참조하여 구현되지 않았고, 독립적인 사양과 프로토콜을 완벽하게  재구현되었다.

 

sd-bus

2013년에 systemd 프로젝트는 코드를 단순화하기 위해 libdbus를 재작성하는 과정에서 D-Bus의 성능을 크게 향상 시켰다.

 

 

Overview

 

D-Bus는 본래 소프트웨어 구성요소 통신 시스템을 대체하기 위해 설계된 IPC 매터니즘으로, GNOME 및 KDE Linux Desktop 환경(각각 CORBA, DCOP)에 의해 사용된다. 이 Desktop 환경들의 구성 요소들은 일반적으로 수많은 프로세스들에 배포되며, 제각기 몇몇의 서비스를 제공한다. 이러한 서비스들은 기능을 수행하기 위해 일반적인 클라이언트 어플에의해, 또는  Desktop 환경의 다른 구성 요소들에 의해 사용될 수 있다.

ㅁㅇㄻㅇㄹ
                   D-Bus가 없는 프로세스들                                                                                            D-Bus가 있는 동일한 프로세스들                     출처: Wikipedia

D-Bus는 소프트웨어 버스 추상화를 제공하여 단일 공유 가상 채널을 경유하여 일련의 프로세스들 간의 모든 통신을 수집한다. 버스에 연결된 프로세스들은 내부 구현 방식에 대해 알지 못하지만 D-Bus 사양은 버스에 연결된 모든 프로세스들이 이를 통해 서로 통신할 수 있게 한다.

 

하나의 프로세스는 버스들에 대한 접근 권한만 있다면 얼마든지 수많은 버스들에 연결이 가능하다. 어떠한 사용자 프로세스라도 시스템 버스 및 현재 소속된 세션 버스에는 연결이 가능하지만 다른 사용자의 세션 버스, 심지어는 동일 사용자가 소유한 다른 세션 버스에는 연결이 불가능하다. 후에 모든 사용자 세션이 하나의 사용자 버스로 병합되는 경우에는 제한이 변경될 수 있다.

 

 D-Bus는 정보 공유, 모듈성, 권한 격리 등 어플리케이션에 대한 기존 기능을 추가하거나 단순화한다. 또한 각기 다른 어플리케이션의 구성 요소 연동을 위한 프레임우크로서의 역할도 가능하다.

 

D-Bus의 예

  1. 블루투스 혹은 스카이프를 통해 들어온 음성 통화의 정보를 현재 실행 중인 음악 플레이어가 알고 통화가 끝날 때까지 일시중지 혹은 음소거
  2. MSOffice의 Word와 Excel Spread sheet간의 데이터 공유를 위해 세션 버스를 통한 통신

'Programming' 카테고리의 다른 글

Rust (Programming Language)  (0) 2023.10.13