Що таке рідний інтерфейс API інтерфейсу Linux?


441

Я сподіваюся, що це не сприймається як дурне питання, але мені завжди було цікаво. І Windows (API Win32), і OS X (Какао) мають власні API для обробки вікон, подій та інших ОС. Я ніколи не отримав чіткої відповіді, що таке еквівалент Linux.

Я чув, як деякі люди кажуть, що GTK +, але GTK + є крос-платформою, як це може бути рідним?


46
Джоні правильно: "У Linux графічний інтерфейс користувача не є частиною операційної системи ... X Window System визначає мережевий протокол для [GUI-можливостей]. Бібліотеки інструментарію, такі як Gtk + (використовується Gnome) та QT (використовується KDE), побудований поверх Xlib. "
paulsm4

33
навпаки, Девід, це відмінне запитання
амфібій

7
Я згоден - я прочитав "API програмування Linux" та "Система програмування ... Unix", які є двома бібліями на ядрі та API, і мені це питання ніколи не приходило в голову :) Відповіді цікаві.
Джон Хамфріс - w00te

10
API Win32 також є платформою, якщо включити Wine ..
Brendan Long

2
У BTW Windows є підсистеми WIN32 / WIN64, які впроваджують багато іншого для 'Windows Look and Feel - ака WIN32' серед іншого. Ці підсистеми працюють над ядром NT. API для них різні. Наприклад C: це абстракція WIN32, а не ядро ​​NT. Те саме для деяких функцій вікон. У Windows також були доступні підсистеми Unix (які певною мірою підтримують X11).
Преет Сангха

Відповіді:


603

У 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 починає використовуватись, і багато дистрибутивів заявляють, що вони в якийсь момент перейдуть на неї, хоча чіткого розкладу досі немає. Ця система базується на API OpenGL / ES, що означає, що в майбутньому OpenGL буде "рідним API інтерфейсу GUI" в Linux. Проводиться робота по порту GTK + і QT до Wayland, щоб поточні популярні програми та настільні системи потребували мінімальних змін. Програми, які неможливо перенести, підтримуватимуться через сервер X11, як OS X підтримує додатки X11 через Xquartz. Очікується, що порт GTK + буде закінчений протягом року , тоді як Qt 5 вже має повну підтримку Wayland.

Щоб ще більше ускладнити справи, Ubuntu оголосив, що розробляє нову систему під назвою Mir через проблеми, які вони відчувають із Wayland. Ця віконна система також заснована на API OpenGL / ES.


95
+1. Оскільки коли операційна система повинна мати графічний інтерфейс, маючи на увазі, що якщо це не так, це не ОС? Дурниці.
Девід Хаммен

42
Навіть Windows спочатку була просто програмою, яка працювала на вершині DOS.
dan04

2
+1 @DavidHammen Я не впевнений, це було спрямовано на мене чи ні, але ви на 100% вірні. Моя термінологія була не зовсім точною. Що я мав би сказати, це те, що це не повна операційна система в тому, як ти можеш зазвичай думати про ОС з усіма додатковими компонентами, що полегшують її використання, а скоріше конгломерація компонентів різних постачальників тощо.
Кріс Томпсон

3
@ChrisThompson - хм ... можливо, я занадто старий, але я ніколи не думав про GUI як про основну частину ОС. І я ніколи не думав, що ОС без графічного інтерфейсу є просто "конгломерацією компонентів різних постачальників тощо". Але ей, можливо, все пішло далі, оскільки я сформулював свою думку про те, що являє собою ОС :)
Джордж Хокінс

2
Якщо відповідь не є вікі спільноти, я не зміню будь-який вміст, окрім вдосконалення граматики / форматування чи додавання посилань. Якщо контент потрібно виправити чи оновити, це відповідальність особи, репутація якої пов'язана зі змістом. Однак я зроблю їм прихильність коментувати, щоб вони зрозуміли, що я думаю, що щось потрібно виправити чи оновити.
Чесний Ейб

84

Linux - це ядро, а не повна операційна система. Існують різні системи вікон та інтерфейси, які працюють на вершині Linux для забезпечення вікон. Зазвичай X11 - це система вікон, використовувана дистрибутивами Linux.


6
Вони будуються поверх нього. X11 - сервер, а KDE, Gnome тощо - менеджери настільних ПК, що надають API більш високого рівня, загальні макети вікон тощо
Марк

7
X11 - це фактично низький рівень шару, який обробляє все це і обробляє малюнок на екрані тощо (і спілкується з графічними драйверами). Gnome / KDE потім керує X11. Це про це на високому рівні та ігнорування мільярда та однієї деталі.
Slugonamission

3
Дякую. ще одне питання: wikipedia пояснює, що X11 "створює апаратний рівень абстракції, де програмне забезпечення написано для використання узагальненого набору команд, що забезпечує незалежність пристрою та повторне використання програм на будь-якому комп'ютері, що реалізує X." моє запитання: чому X11 надає апаратну взаємодію (HAL), чи має ядро ​​Linux передбачати, що X11 працює над поверхнею ядра? Іншими словами, чому X11 доходить до апаратних пристроїв, коли ядро ​​має бути його проксі?
земноводний

1
Я думаю, що в даному випадку HALце неправильно вживаний термін. Дійсно, те, що вони говорять, - це те, що X11 забезпечує незалежний від системи спосіб відображення вікон. Існують версії X11 для Дарвіна (Mac OS - це насправді складніше зараз з Mountain Lion ...), MS Windows та Linux.
Кріс Томпсон

4
X11 - мережевий протокол. Абстракція передбачає написання програм на платформі A, які можуть відображати клієнтів X11 (windows, програми тощо) на платформі B через деяке мережеве обладнання. Ваш додаток може працювати локально, віддалено, на вкладеному сервері, на віртуальному сервері, який виконує лише VNC тощо. Абстракція обладнання (на локальній платформі) є побічним ефектом цієї функції, але також розмиває лінію між X11 та ядро (це те, що робить апаратне абстрагування в середній системі Unix).
Олексій

59

ВейлендТакож варто згадати , оскільки його здебільшого називають "майбутнім вбивцею X11".

Також зауважте, що Android та деякі інші мобільні операційні системи не включають X11, хоча вони мають ядро ​​Linux, тому X11 не є рідним для всіх систем Linux.

Бути крос-платформою не має нічого спільного з рідним. Какао також переноситься на інші платформи через GNUStep, але він все ще є рідним для OS X / macOS.


2
Діаграма архітектури високого рівня для Wayland така ж, як і для X, за винятком того, що "Композитор" та "Сервер" на діаграмі X об'єднані в діаграму Wayland. Чого бракує, це правдоподібне пояснення того, чому цю інтеграцію не вдалося перетворити на X.
Kaz

1
ну, я б сказав, що непросто змінити фундаментальний дизайн 20-річної бази коду. Також зауважте, що ще одна проблема з X11 полягає в тому, що сьогодні більшість його функціональних можливостей, таких як візуалізація шрифту, не використовується. Плюс X11 все ще знадобиться в серверах і суперкомп'ютерах, прозорість мережі просто надто хороша, щоб відмовитися.
немає

3
@gokcehan wayland не опускає прозорість мережі, це міф. Це не реалізовано ще , так само , як і багато інших речей в Wayland. wayland.freedesktop.org/faq.html#heading_toc_j_8 blog.martin-graesslin.com/blog/2011/08/… тощо
whitequark

8
+! за згадку про відсутність Android в X11. Android, мабуть, є найбільш переконливим зустрічним прикладом аргументу про те, що "x11 - це власний linux GUI". Демонструючи, що Linux може мати x11 або Android, оскільки це "рідний" графічний інтерфейс, показує початківцям, що Linux - це просто ядро ​​і не завжди має графічний інтерфейс.
Тревор Бойд Сміт

"Бути крос-платформою не має нічого спільного з тим, щоб бути рідним" - це відмінний момент. Я дуже часто використовував цей зразок протягом своїх років перенесення крос-платформи. Найбільш помітно, що в 90-х я продав рамку, яка дозволила вам перехресне компілювати код, написаний в рамках Metrowerks PowerPlant, використовуючи MFC під кришкою. (Перед тим, як хтось посміхнеться, як тільки ви потрапите нижче макросів, MFC цілком розумний.) У мене також було декілька завдань перенесення, де або Win32, чи API Toolbox API був специфікацією, проти якої ми компілювали, повторно доповнювали на інших платформах .
Енді Дент

23

Строго кажучи, API Linux складається з його системних викликів . Це всі функції ядра, які можна викликати програмою в режимі користувача (не ядро). Це дуже низький рівень інтерфейсу, який дозволяє програмам робити такі речі, як відкриття та читання файлів. Дивіться http://en.wikipedia.org/wiki/System_call для загального вступу.

Справжня система Linux також матиме цілий "стек" іншого програмного забезпечення, що працює на ньому, щоб забезпечити графічний інтерфейс користувача та інші функції. Кожен елемент цього стека пропонує свій власний API.


3
Ця відповідь була написана, коли питання було "Що таке рідний API Linux?" (відтоді до запитання було вставлено "GUI").
nibot

Це все-таки правильна відповідь на те, що зараз є невідповідним питанням, оскільки жодна із систем, що сидять на вершині Linux, включаючи GNU та X11, не є "рідною" у будь-якому змістовному сенсі.
Джим Балтер

20

Щоб допомогти у тому, що вже було сказано, на цьому блозі є дуже хороший огляд графічного стека Linux: http://blog.mecheye.net/2012/06/the-linux-graphics-stack/

Це пояснює X11 / Wayland тощо і те, як все це поєднується. На додаток до вже згадуваного, я думаю, що варто додати трохи про такі API, які можна використовувати для графіки в Linux:

Меса - "Mesa - це багато речей, але одна з найважливіших речей, яку він передбачає, найбільш відомою є його реалізація OpenGL. Це реалізація API OpenGL з відкритим кодом".

Каїр - " - це бібліотека малюнків, яка використовується або програмами, такими як Firefox безпосередньо, або через бібліотеки типу GTK +, щоб малювати векторні форми".

DRM (Direct Rendering Manager) - я це найменше розумію, але в основному це драйвери ядра, які дозволяють писати графіку безпосередньо в framebuffer, не проходячи X


habrahabr.ru/post/148954 - (російською) переклад цього повідомлення, якщо комусь потрібно
Борис Бурков


5

XWindows, мабуть, найближче до того, що можна назвати "рідним" :)


3
це те саме, що і x11?
DavidColson

1
Але якщо ви користуєтесь ним безпосередньо, ви побачите, що це не зовсім графічний інтерфейс GUI ... У Linux просто немає 1 рідного інтерфейсу GUI. Але майже всі ці графічні інтерфейси API (принаймні ті, які часто існують у Linux Linux на робочому столі) працюють над X. Якщо ви почнете писати додаток із звичайного старого X сьогодні, він виглядатиме зовсім поза місцем у будь-якому сучасному дистрибутиві, тож я б скажімо, власний графічний інтерфейс залежить від розподілу - gtk / gnome для ubuntu, kde для інших.
Аксель

1

Найближчим до Win32 у Linux буде libc, оскільки ви згадуєте не лише інтерфейс, але й події та "інші речі"


5
libc (стандартна бібліотека C) - це інтерфейс до системних викликів ОС. Останнє (системні виклики ОС) в Linux, що грубо перекладається на Win32 в Windows. Ви не можете реально (або взагалі?) Програму для поточних версій Windows, якщо на якомусь рівні не використовується API Win32, але ви можете запрограмувати як для Windows, так і для Linux, не використовуючи стандартну бібліотеку C компілятора, просто дублюючи пряму- код-syscalls. Це не рекомендується, і він робить ваш код абсолютно непридатним для інших ОС, але це можливо зробити.
CVn

Користувацький інтерфейс не є частиною libc - до тих пір, поки ви не вважаєте, що printf / scanf тощо, як інтерфейс користувача, ... libc - це лише стандартна бібліотека C. І це насправді не інтерфейс до системних дзвінків ОС. Він надає функції для вводу-виводу файлів, управління пам’яттю, обробкою рядків тощо і внутрішньо використовує системні виклики. Щоб здійснювати системні дзвінки як ioctlви самі, вам потрібно буде включити щось із sys/.
Аксель

Питання не завжди вказувало "GUI".
jv110

Можливо, ви про це Xlibне говорите libc.
i486

1

Графічні операції з ядром Linux містяться в /include/linux/fb.h як структура fb_ops. Врешті-решт саме на це з'являються додатки, такі як X11, Wayland або DRM. Оскільки ці операції призначені лише для відеокарт, а не векторних або растрових копій або термінальних пристроїв, орієнтованих на tty, їх корисність як графічний інтерфейс обмежена; це просто не зовсім вірно, що вам потрібні ці додатки, щоб отримати графічний вихід, якщо ви не заперечуєте з використанням якогось асемблера для обходу syscall за необхідності.


0

GUI - це абстракція можливостей високого рівня, тому майже все, починаючи від сервера XOrg до OpenGL, переноситься міжплатформою, в тому числі для платформи Windows. Але якщо під GUI API ви маєте на увазі * nix graphics API, то, можливо, ви блукаєте навколо «Інфраструктури прямого рендерінгу».


0

Вейленд

Як ви могли почути, Wayland - це вибір багатьох дистрибутивів, оскільки його протокол простіший, ніж X.

Інструментарій набору шляху

Набори інструментів або бібліотеки gui, які пропонує Wayland :

  • QT 5
  • GTK +
  • LSD
  • Захаращення
  • EFL

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.