Mam nadzieję, że nie jest to głupie pytanie, ale zawsze zastanawiałem się. Zarówno Windows (Win32 API), jak i OS X (Cocoa) mają własne API do obsługi okien, zdarzeń i innych rzeczy związanych z systemem operacyjnym. Nigdy tak naprawdę nie mam jasnej odpowiedzi na pytanie, czym jest odpowiednik Linuksa.
Słyszałem, jak niektórzy mówili, że GTK +, ale GTK + jest wieloplatformowy, jak może być natywny?
Odpowiedzi:
W systemie Linux graficzny interfejs użytkownika nie jest częścią systemu operacyjnego. Graficzny interfejs użytkownika dostępny na większości komputerów z systemem Linux jest dostarczany przez oprogramowanie o nazwie X Window System , które określa niezależny od urządzenia sposób radzenia sobie z ekranami, klawiaturami i wskaźnikami.
X Window definiuje protokół sieciowy do komunikacji i każdy program, który umie „mówić” tym protokołem, może go używać. Jest to biblioteka C nazywa Xlib że łatwiej korzystać z tego protokołu, więc Xlib niby na rodzimym GUI API. Xlib to nie jedyny sposób na dostęp do serwera X Window; jest też XCB .
Biblioteki zestawów narzędzi, takie jak GTK + (używane przez GNOME ) i Qt (używane przez KDE ), zbudowane na Xlib, są używane, ponieważ są łatwiejsze do programowania. Na przykład zapewniają spójny wygląd i obsługę różnych aplikacji, ułatwiają przeciąganie i upuszczanie, zapewniają standardowe komponenty nowoczesnego środowiska komputerowego i tak dalej.
To, jak X wewnętrznie rysuje na ekranie, zależy od implementacji. X.org ma część niezależną od urządzenia i część zależną od urządzenia. Ten pierwszy zarządza zasobami ekranowymi, takimi jak Windows, podczas gdy drugi komunikuje się ze sterownikiem karty graficznej, zwykle modułem jądra. Komunikacja może odbywać się przez bezpośredni dostęp do pamięci lub przez wywołania systemowe do jądra. Sterownik tłumaczy polecenia na postać zrozumiałą dla sprzętu na karcie.
Począwszy od 2013 r. Nowy system okien o nazwie Wayland zaczyna być użyteczny, a wiele dystrybucji mówi, że w pewnym momencie do niego migruje, choć nadal nie ma jasnego harmonogramu. System ten oparty jest na API OpenGL / ES, co oznacza, że w przyszłości OpenGL będzie „natywnym interfejsem GUI API” w systemie Linux. Trwają prace nad przeniesieniem GTK + i QT do Wayland, tak aby obecne popularne aplikacje i systemy komputerowe wymagały minimalnych zmian. Aplikacje, których nie można przenieść, będą obsługiwane przez serwer X11, podobnie jak OS X obsługuje aplikacje X11 za pośrednictwem Xquartz. Port GTK + ma zostać ukończony w ciągu roku , a Qt 5 ma już pełną obsługę Wayland.
Aby jeszcze bardziej skomplikować sprawy, Ubuntu ogłosiło, że opracowuje nowy system o nazwie Mir z powodu problemów, które dostrzegają w Wayland. Ten system okien jest również oparty na API OpenGL / ES.
źródło
Linux to jądro, a nie pełny system operacyjny. Istnieją różne systemy okienkowe i GUI, które działają na Linuksie, aby zapewnić okienkowanie. Zazwyczaj X11 jest systemem okienkowym używanym przez dystrybucje Linuksa.
źródło
HAL
jest to niepoprawnie użyty termin. Naprawdę mówią, że X11 zapewnia niezależny od systemu sposób wyświetlania okien. Istnieją wersje X11 dla Darwina (Mac OS - teraz jest to bardziej skomplikowane z Mountain Lion ...), MS Windows i Linux.Warto również wspomnieć o Waylandzie, ponieważ jest on nazywany „przyszłym zabójcą X11”.
Zauważ też, że Android i niektóre inne mobilne systemy operacyjne nie zawierają X11, chociaż mają jądro Linuksa, więc w tym sensie X11 nie jest natywny dla wszystkich systemów Linux.
Bycie wieloplatformowym nie ma nic wspólnego z byciem rodzimym. Kakao zostało również przeniesione na inne platformy za pośrednictwem GNUStep, ale nadal jest natywne dla OS X / macOS.
źródło
Ściśle mówiąc, API systemu Linux składa się z wywołań systemowych . Są to wszystkie funkcje jądra, które mogą być wywoływane przez program trybu użytkownika (inny niż jądro). Jest to interfejs bardzo niskiego poziomu, który pozwala programom wykonywać takie czynności, jak otwieranie i odczytywanie plików. Zobacz http://en.wikipedia.org/wiki/System_callOgólne wprowadzenie można .
Prawdziwy system Linux będzie również miał działający na nim cały „stos” innego oprogramowania, aby zapewnić graficzny interfejs użytkownika i inne funkcje. Każdy element tego stosu będzie oferował własne API.
źródło
Aby wspomóc to, o czym już wspomniano, na blogu znajduje się bardzo dobry przegląd grafiki w systemie Linux: http://blog.mecheye.net/2012/06/the-linux-graphics-stack/
To wyjaśnia X11 / Wayland itp. I jak to wszystko do siebie pasuje. Oprócz tego, co już wspomniano, myślę, że warto dodać trochę o następujących interfejsach API, których można używać do grafiki w systemie Linux:
Mesa - „Mesa to wiele rzeczy, ale jedną z najważniejszych rzeczy, z których słynie najbardziej, jest implementacja OpenGL. Jest to implementacja OpenGL API typu open source”.
Kair - „Cairo to biblioteka rysunków używana albo przez aplikacje takie jak Firefox bezpośrednio, lub przez biblioteki takie jak GTK +, do rysowania kształtów wektorowych”.
DRM (Direct Rendering Manager) - Rozumiem to co najmniej, ale w zasadzie są to sterowniki jądra, które pozwalają pisać grafiki bezpośrednio do bufora ramki bez przechodzenia przez X
źródło
Podejrzewam, że pytanie bardziej przypomina „Co to jest natywny interfejs GUI API dla Linuksa”.
W większości przypadków zostanie do tego użyty X (alias X11): http://en.wikipedia.org/wiki/X_Window_System .
Dokumentację API można znaleźć tutaj
źródło
XWindows jest prawdopodobnie najbliższy temu, co można nazwać „rodzimym” :)
źródło
W Linuksie najbliższą rzeczą dla Win32 byłby libc, ponieważ wspominasz nie tylko interfejs użytkownika, ale zdarzenia i „inne rzeczy z systemu operacyjnego”
źródło
ioctl
ty musisz dołączyć coś zsys/
.Xlib
nielibc
.Operacje graficzne jądra Linuxa znajdują się w /include/linux/fb.h jako struct fb_ops. W końcu właśnie takie dodatki, jak X11, Wayland lub DRM, wydają się odnosić. Ponieważ operacje te dotyczą tylko kart graficznych, a nie urządzeń drukowanych w formacie wektorowym lub rastrowym lub urządzeń końcowych zorientowanych na tty, ich użyteczność jako GUI jest ograniczona; po prostu nie jest do końca prawdą, że potrzebujesz tych dodatków, aby uzyskać wyjście graficzne, jeśli nie masz nic przeciwko użyciu jakiegoś asemblera do obejścia syscall w razie potrzeby.
źródło
GUI to abstrakcja możliwości na wysokim poziomie, więc prawie wszystko, od serwera XOrg po OpenGL, jest przenoszone na wiele platform, w tym na platformę Windows. Ale jeśli przez GUI API masz na myśli * graficzny interfejs API nix, to możesz wędrować po „infrastrukturze bezpośredniego renderowania”.
źródło
Wayland
Jak możesz usłyszeć, Wayland jest obecnie polecanym wyborem wielu dystrybucji, ponieważ jego protokół jest prostszy niż X.
Zestawy narzędzi Wayland
Zestawy narzędzi lub biblioteki GUI sugerowane przez Wayland to:
źródło
Parafrazując oryginalne pytanie:
P. Jaki jest odpowiednik interfejsów programowania aplikacji Microsoft i Apple w systemie Linux?
A. „Interfejs API jądra systemu Linux”. https://www.kernel.org/doc/htmldocs/kernel-api
źródło