Надеюсь, это не глупый вопрос, но я всегда удивляюсь этому. И Windows (API Win32), и OS X (Какао) имеют свои собственные API для обработки окон, событий и других вещей ОС. Я никогда не получал четкого ответа о том, каков эквивалент Linux.
Я слышал, что некоторые люди говорят GTK +, но GTK +, будучи кроссплатформенным, как это может быть нативным?
Ответы:
В Linux графический интерфейс пользователя не является частью операционной системы. Графический интерфейс пользователя, встречающийся на большинстве настольных систем Linux, предоставляется программным обеспечением, называемым X Window System , которое определяет независимый от устройства способ работы с экранами, клавиатурами и указательными устройствами.
X Window определяет сетевой протокол для связи, и любая программа, которая знает, как «говорить» по этому протоколу, может использовать его. Существует библиотека C под названием Xlib, которая упрощает использование этого протокола, поэтому Xlib является своего рода в родной GUI API. Xlib - не единственный способ получить доступ к серверу X Window; также есть XCB .
Библиотеки инструментария, такие как GTK + (используется GNOME ) и Qt (используется KDE ), построенные поверх Xlib, используются потому, что с ними проще программировать. Например, они обеспечивают единообразный внешний вид приложений, упрощают использование перетаскивания, предоставляют компоненты, стандартные для современной среды рабочего стола, и т. Д.
То, как X рисует на экране, зависит от реализации. X.org имеет независимую от устройства часть и зависимую от устройства часть. Первый управляет ресурсами экрана, такими как windows, а второй связывается с драйвером графической карты, обычно с модулем ядра. Связь может происходить через прямой доступ к памяти или через системные вызовы ядра. Драйвер переводит команды в форму, понятную аппаратному обеспечению на карте.
С 2013 года новая оконная система под названием Wayland начинает становиться пригодной для использования, и во многих дистрибутивах говорят, что в какой-то момент она перейдет на нее, хотя четкого графика пока нет. Эта система основана на OpenGL / ES API, что означает, что в будущем OpenGL будет «родным GUI API» в Linux. Ведется работа по переносу GTK + и QT на Wayland, поэтому современные популярные приложения и настольные системы потребуют минимальных изменений. Приложения, которые нельзя перенести, будут поддерживаться через сервер X11, так же как OS X поддерживает приложения X11 через Xquartz. Ожидается, что порт GTK + будет завершен в течение года , а Qt 5 уже имеет полную поддержку Wayland.
Чтобы еще больше усложнить ситуацию, Ubuntu объявила, что разрабатывает новую систему под названием Mir из-за проблем, которые они испытывают с Wayland. Эта оконная система также основана на API OpenGL / ES.
источник
Linux - это ядро, а не полноценная операционная система. Существуют разные оконные системы и графические интерфейсы, которые работают поверх Linux для обеспечения оконного управления. Обычно X11 - это оконная система, используемая дистрибутивами Linux.
источник
HAL
это неправильно используемый термин. На самом деле они говорят, что X11 предоставляет независимые от системы средства для отображения окон. Существуют версии X11 для Darwin (Mac OS - это на самом деле сложнее с Mountain Lion ...), MS Windows и Linux.Стоит также упомянуть Wayland, так как его называют «будущим убийцей X11».
Также обратите внимание, что Android и некоторые другие мобильные операционные системы не включают X11, хотя они имеют ядро Linux, поэтому в этом смысле X11 не является родным для всех систем Linux.
Кроссплатформенность не имеет ничего общего с тем, чтобы быть нативным. Какао также было портировано на другие платформы через GNUStep, но все еще является родным для OS X / macOS.
источник
Строго говоря, API Linux состоит из его системных вызовов . Это все функции ядра, которые могут вызываться программой пользовательского режима (не ядра). Это интерфейс очень низкого уровня, который позволяет программам делать такие вещи, как открывать и читать файлы. См. Http://en.wikipedia.org/wiki/System_call для общего ознакомления.
Настоящая система Linux также будет иметь целый «стек» другого программного обеспечения, работающего на ней, чтобы обеспечить графический интерфейс пользователя и другие функции. Каждый элемент этого стека будет предлагать свой собственный API.
источник
Чтобы помочь в том, что уже было упомянуто, в этом блоге очень хороший обзор графического стека Linux: http://blog.mecheye.net/2012/06/the-linux-graphics-stack/
Это объясняет X11 / Wayland и т. Д. И как все это сочетается. В дополнение к тому, что уже было упомянуто, я думаю, что стоит добавить немного о следующих API, которые вы можете использовать для графики в Linux:
Mesa - «Mesa - это много вещей, но одной из основных вещей, которые она обеспечивает, является самой известной ее реализация OpenGL. Это реализация OpenGL API с открытым исходным кодом».
Cairo - «cairo - это библиотека для рисования, используемая приложениями, такими как Firefox, напрямую или через библиотеки, такие как GTK +, для рисования векторных фигур».
DRM (Direct Rendering Manager) - я понимаю это меньше всего, но в основном это драйверы ядра, которые позволяют записывать графику непосредственно в кадровый буфер, не проходя через X
источник
Я полагаю, что вопрос больше похож на «Что такое родной интерфейс Linux API».
В большинстве случаев X (иначе X11) будет использоваться для этого: http://en.wikipedia.org/wiki/X_Window_System .
Вы можете найти документацию по API здесь
источник
XWindows, вероятно, ближе всего к тому, что можно назвать «нативным» :)
источник
Ближе всего к Win32 в Linux будет libc, так как вы упоминаете не только пользовательский интерфейс, но и другие события и прочее.
источник
ioctl
вы, вы должны включить что-то изsys/
.Xlib
нетlibc
.Графические операции ядра Linux находятся в /include/linux/fb.h как struct fb_ops. В конце концов, это то, на что ссылаются надстройки, такие как X11, Wayland или DRM. Так как эти операции предназначены только для видеокарт, а не для векторных или растровых копий или для терминальных устройств, ориентированных на tty, их полезность в качестве графического интерфейса ограничена; просто не совсем верно, что вам нужны эти дополнения для получения графического вывода, если вы не возражаете против использования ассемблера для обхода syscall по мере необходимости.
источник
GUI - это абстракция возможностей высокого уровня, поэтому практически все, от сервера XOrg до OpenGL, портировано кроссплатформенно, в том числе для платформы Windows. Но если под GUI API вы имеете в виду * nix graphics API, то вы можете бродить вокруг «инфраструктуры прямого рендеринга».
источник
Wayland
Как вы, возможно, слышали, в наши дни Wayland является популярным выбором многих дистрибутивов, поскольку его протокол проще, чем X.
Инструментарий Wayland
Наборы инструментов или графические библиотеки, которые предлагает Wayland :
источник
Перефразируя исходный вопрос:
В. Каков Linux-эквивалент интерфейсов прикладного программирования Microsoft и Apple?
A. «API ядра Linux». https://www.kernel.org/doc/htmldocs/kernel-api
источник