나는 이것이 바보 같은 질문으로 나오지 않기를 희망하지만 항상 내가 궁금했던 것입니다. Windows (Win32 API) 및 OS X (Cocoa)에는 창, 이벤트 및 기타 OS 관련 항목을 처리하기위한 자체 API가 있습니다. 나는 리눅스와 동등한 것이 무엇인지에 대한 명확한 대답을 얻지 못했습니다.
일부 사람들은 GTK +라고 말했지만 GTK +는 플랫폼 간이며 어떻게 네이티브가 될 수 있습니까?
나는 이것이 바보 같은 질문으로 나오지 않기를 희망하지만 항상 내가 궁금했던 것입니다. Windows (Win32 API) 및 OS X (Cocoa)에는 창, 이벤트 및 기타 OS 관련 항목을 처리하기위한 자체 API가 있습니다. 나는 리눅스와 동등한 것이 무엇인지에 대한 명확한 대답을 얻지 못했습니다.
일부 사람들은 GTK +라고 말했지만 GTK +는 플랫폼 간이며 어떻게 네이티브가 될 수 있습니까?
답변:
Linux에서 그래픽 사용자 인터페이스는 운영 체제의 일부가 아닙니다. 대부분의 Linux 데스크톱에서 볼 수있는 그래픽 사용자 인터페이스는 X Window System 이라는 소프트웨어에 의해 제공됩니다. X Window System 은 화면, 키보드 및 포인터 장치를 처리하는 장치 독립적 인 방법을 정의합니다.
X Window는 통신을위한 네트워크 프로토콜을 정의하며이 프로토콜을 "말하는"방법을 알고있는 모든 프로그램이이를 사용할 수 있습니다. 라는 C 라이브러리가 Xlib를 Xlib를 일종의 그래서, 쉽게이 프로토콜을 사용할 수있게 기본 GUI API는. Xlib가 X Window 서버에 액세스하는 유일한 방법은 아닙니다. 또한이 XCB는 .
Xlib 기반으로 구축 된 GTK + ( GNOME 사용 ) 및 Qt ( KDE 사용 )와 같은 툴킷 라이브러리 는 프로그래밍하기 쉬우므로 사용됩니다. 예를 들어 응용 프로그램에서 일관된 모양과 느낌을 제공하고 드래그 앤 드롭을보다 쉽게 사용할 수 있도록하며 최신 데스크톱 환경에 표준 구성 요소를 제공하는 등의 작업을 수행합니다.
X가 화면에서 내부적으로 그리는 방법은 구현에 따라 다릅니다. X.org 에는 장치 독립 부품과 장치 종속 부품이 있습니다. 전자는 윈도우와 같은 화면 리소스를 관리하고 후자는 그래픽 카드 드라이버 (일반적으로 커널 모듈)와 통신합니다. 통신은 직접 메모리 액세스 또는 커널에 대한 시스템 호출 을 통해 발생할 수 있습니다 . 드라이버는 명령을 카드의 하드웨어가 이해하는 형태로 변환합니다.
2013 년 현재 Wayland 라는 새로운 창 시스템 을 사용할 수있게되었으며 많은 배포판에서 일정이 명확하지 않지만 일정 시점에 마이그레이션 할 것이라고 발표했습니다. 이 시스템은 OpenGL / ES API를 기반으로하므로 향후 OpenGL은 Linux에서 "기본 GUI API"가됩니다. GTK + 및 QT를 Wayland로 포팅하기위한 작업이 진행 중이므로 현재 널리 사용되는 애플리케이션 및 데스크탑 시스템은 최소한의 변경 만 필요합니다. 이식 할 수없는 응용 프로그램은 OS X이 Xquartz를 통해 X11 응용 프로그램을 지원하는 것처럼 X11 서버를 통해 지원됩니다. GTK + 포트는 1 년 안에 완료 될 것으로 예상 되며 Qt 5는 이미 Wayland 지원을 완벽하게 지원합니다.
문제를 더 복잡하게 만들기 위해 우분투는 Wayland에서 인식하는 문제 때문에 Mir 라는 새로운 시스템을 개발한다고 발표했습니다 . 이 윈도우 시스템은 OpenGL / ES API를 기반으로합니다.
Linux는 전체 운영 체제가 아닌 커널입니다. 윈도 잉을 제공하기 위해 Linux 위에서 실행되는 서로 다른 윈도 잉 시스템과 GUI가 있습니다. 일반적으로 X11 은 Linux 배포판에서 사용하는 윈도우 시스템입니다.
HAL
잘못 사용되는 용어입니다. 그들이 말하는 것은 X11은 시스템 독립적 인 창 표시 방법을 제공한다는 것입니다. Darwin 용 X11 버전 (Mac OS-실제로 Mountain Lion에서는 더 복잡 해짐), MS Windows 및 Linux가 있습니다.
Wayland 는 또한 주로 "미래 X11 킬러"라고도 불립니다.
또한 Android 및 일부 다른 모바일 운영 체제에는 Linux 커널이 있지만 X11이 포함되어 있지 않으므로 X11이 모든 Linux 시스템에 고유하지는 않습니다.
크로스 플랫폼 인 것은 네이티브 인 것과 아무 관련이 없습니다. Cocoa는 GNUStep을 통해 다른 플랫폼으로 포팅 되었지만 여전히 OS X / macOS에 고유합니다.
엄밀히 말하면 Linux의 API는 시스템 호출 로 구성됩니다 . 사용자 모드 (비 커널) 프로그램에서 호출 할 수있는 모든 커널 기능입니다. 프로그램이 파일 열기 및 읽기와 같은 작업을 수행 할 수 있도록하는 매우 낮은 수준의 인터페이스입니다. 일반적인 소개는 http://en.wikipedia.org/wiki/System_call 을 참조하십시오 .
실제 Linux 시스템에는 그래픽 사용자 인터페이스 및 기타 기능을 제공하기 위해 실행중인 다른 소프트웨어의 전체 "스택"이 있습니다. 이 스택의 각 요소는 자체 API를 제공합니다.
이미 언급 된 내용을 돕기 위해이 블로그에는 Linux 그래픽 스택에 대한 매우 훌륭한 개요가 있습니다. http://blog.mecheye.net/2012/06/the-linux-graphics-stack/
여기에서는 X11 / Wayland 등을 설명하고 모두 잘 어울립니다. 이미 언급 한 것 외에도 Linux에서 그래픽에 사용할 수있는 다음 API에 대해 조금 추가 할 가치가 있다고 생각합니다.
Mesa- "Mesa는 많은 것들이지만, 가장 유명한 것은 OpenGL 구현입니다. OpenGL API의 오픈 소스 구현입니다."
카이로 - "카이로는 벡터 모양을 그려, 직접, 또는 GTK +와 같은 라이브러리를 파이어 폭스와 같은 응용 프로그램 중 하나를 사용하는 도면 라이브러리입니다."
DRM (Direct Rendering Manager) -나는 이것을 최소한 이해하지만 기본적으로 X를 거치지 않고 프레임 버퍼에 직접 그래픽을 쓸 수있는 커널 드라이버를 이해합니다.
질문은 "리눅스의 기본 GUI API 란 무엇인가"와 비슷하다고 생각합니다.
대부분의 경우 X (일명 X11)가 http://en.wikipedia.org/wiki/X_Window_System에 사용 됩니다.
API 문서는 여기에서 찾을 수 있습니다
XWindows는 아마도 'native'라고 불리는 것에 가장 가깝습니다. :)
리눅스에서 Win32에 가장 가까운 것은 UI뿐만 아니라 이벤트와 "기타 OS"를 언급했듯이 libc입니다.
ioctl
자신 과 같은 시스템 호출 을하려면에서 무언가를 포함해야합니다 sys/
.
Xlib
하지 않을 수도 있습니다 libc
.
원래의 질문을 바꾸려면 :
Q. Linux는 Microsoft 및 Apple 응용 프로그램 프로그래밍 인터페이스와 동일합니까?
A. "리눅스 커널 API" https://www.kernel.org/doc/htmldocs/kernel-api