Saya harap ini tidak muncul sebagai pertanyaan bodoh tapi selalu sesuatu yang saya bertanya-tanya. Baik Windows (Win32 API) dan OS X (Cocoa) memiliki API mereka sendiri untuk menangani windows, acara dan hal-hal OS lainnya. Saya tidak pernah benar-benar mendapat jawaban yang jelas tentang apa yang setara dengan Linux.
Saya telah mendengar beberapa orang mengatakan GTK +, tetapi GTK + menjadi lintas platform, bagaimana bisa asli?
Jawaban:
Di Linux antarmuka pengguna grafis bukan bagian dari sistem operasi. Antarmuka pengguna grafis yang ditemukan di sebagian besar desktop Linux disediakan oleh perangkat lunak yang disebut Sistem X Window , yang mendefinisikan cara independen perangkat untuk berurusan dengan layar, keyboard, dan perangkat pointer.
X Window mendefinisikan protokol jaringan untuk komunikasi, dan setiap program yang tahu bagaimana "berbicara" protokol ini dapat menggunakannya. Ada C library disebut Xlib yang membuatnya lebih mudah untuk menggunakan protokol ini, sehingga Xlib adalah jenis yang GUI API asli. Xlib bukan satu-satunya cara untuk mengakses server X Window; ada juga XCB .
Pustaka Toolkit seperti GTK + (digunakan oleh GNOME ) dan Qt (digunakan oleh KDE ), dibangun di atas Xlib, digunakan karena lebih mudah diprogram. Misalnya mereka memberi Anda tampilan dan rasa yang konsisten di seluruh aplikasi, membuatnya lebih mudah untuk menggunakan drag-and-drop, menyediakan komponen standar untuk lingkungan desktop modern, dan sebagainya.
Bagaimana X menggambar di layar secara internal tergantung pada implementasinya. X.org memiliki bagian yang independen pada perangkat dan bagian yang tergantung pada perangkat. Mantan mengelola sumber daya layar seperti windows, sedangkan yang terakhir berkomunikasi dengan driver kartu grafis, biasanya modul kernel. Komunikasi dapat terjadi melalui akses memori langsung atau melalui panggilan sistem ke kernel. Pengemudi menerjemahkan perintah ke dalam bentuk yang dimengerti oleh perangkat keras pada kartu.
Pada 2013, sistem jendela baru bernama Wayland mulai dapat digunakan, dan banyak distribusi mengatakan mereka akan bermigrasi ke sana, meskipun masih belum ada jadwal yang jelas. Sistem ini didasarkan pada OpenGL / ES API, yang berarti bahwa di masa depan OpenGL akan menjadi "API GUI asli" di Linux. Pekerjaan sedang dilakukan untuk port GTK + dan QT ke Wayland, sehingga aplikasi populer dan sistem desktop akan membutuhkan perubahan minimal. Aplikasi yang tidak dapat porting akan didukung melalui server X11, seperti halnya OS X mendukung aplikasi X11 melalui Xquartz. Port GTK + diharapkan selesai dalam waktu satu tahun , sementara Qt 5 sudah memiliki dukungan Wayland yang lengkap.
Untuk semakin memperumit masalah, Ubuntu telah mengumumkan mereka sedang mengembangkan sistem baru yang disebut Mir karena masalah yang mereka rasakan dengan Wayland. Sistem jendela ini juga didasarkan pada OpenGL / ES API.
sumber
Linux adalah kernel, bukan sistem operasi penuh. Ada beberapa sistem windowing dan gui yang berjalan di atas Linux untuk menyediakan windowing. Biasanya X11 adalah sistem windowing yang digunakan oleh distro Linux.
sumber
HAL
ini istilah yang salah digunakan. Sungguh apa yang mereka katakan adalah X11 menyediakan sarana yang bebas sistem untuk menampilkan windows. Ada versi X11 untuk Darwin (Mac OS - yang sebenarnya lebih rumit sekarang dengan Mountain Lion ...), MS Windows dan Linux.Wayland juga layak disebut karena sebagian besar disebut sebagai "pembunuh X11 masa depan".
Juga perhatikan bahwa Android dan beberapa sistem operasi seluler lainnya tidak menyertakan X11 walaupun mereka memiliki kernel Linux, jadi dalam hal itu X11 bukan asli untuk semua sistem Linux.
Menjadi lintas platform tidak ada hubungannya dengan menjadi asli. Cocoa juga telah porting ke platform lain melalui GNUStep tetapi masih asli untuk OS X / macOS.
sumber
Sebenarnya, API Linux terdiri dari panggilan sistemnya . Ini semua adalah fungsi kernel yang dapat dipanggil oleh program mode pengguna (non-kernel). Ini adalah antarmuka tingkat sangat rendah yang memungkinkan program melakukan hal-hal seperti membuka dan membaca file. Lihat http://en.wikipedia.org/wiki/System_call untuk pengantar umum.
Sistem Linux yang nyata juga akan memiliki "tumpukan" seluruh perangkat lunak lain yang berjalan di atasnya, untuk menyediakan antarmuka pengguna grafis dan fitur lainnya. Setiap elemen tumpukan ini akan menawarkan APInya sendiri.
sumber
Untuk membantu apa yang telah disebutkan ada gambaran yang sangat baik dari tumpukan grafis Linux di blog ini: http://blog.mecheye.net/2012/06/the-linux-graphics-stack/
Ini menjelaskan X11 / Wayland dll dan bagaimana semuanya cocok. Selain apa yang telah disebutkan, saya pikir ada baiknya menambahkan sedikit tentang API berikut yang dapat Anda gunakan untuk grafis di Linux:
Mesa - "Mesa adalah banyak hal, tetapi salah satu hal utama yang disediakannya adalah yang paling terkenal adalah implementasi OpenGL. Ini adalah implementasi open-source API OpenGL."
Kairo - "Kairo adalah perpustakaan gambar yang digunakan baik oleh aplikasi seperti Firefox secara langsung, atau melalui perpustakaan seperti GTK +, untuk menggambar bentuk vektor."
DRM (Direct Rendering Manager) - Saya paling tidak memahami hal ini tetapi pada dasarnya adalah driver kernel yang memungkinkan Anda menulis grafik langsung ke framebuffer tanpa melalui X
sumber
Saya kira pertanyaannya lebih seperti "Apa itu GUI API asli linux".
Dalam kebanyakan kasus X (alias X11) akan digunakan untuk itu: http://en.wikipedia.org/wiki/X_Window_System .
Anda dapat menemukan dokumentasi API di sini
sumber
XWindows mungkin adalah yang paling dekat dengan apa yang bisa disebut 'asli' :)
sumber
Hal yang paling dekat dengan Win32 di linux adalah libc, seperti yang Anda sebutkan tidak hanya UI tetapi acara dan "hal-hal os lainnya"
sumber
ioctl
Anda sendiri, Anda harus memasukkan sesuatu darisys/
.Xlib
tidaklibc
.Operasi grafis kernel linux ada di /include/linux/fb.h sebagai struct fb_ops. Akhirnya ini adalah apa yang tampak sebagai referensi seperti X11, Wayland, atau DRM. Karena operasi ini hanya untuk kartu video, bukan hardcopy vektor atau raster atau perangkat terminal yang berorientasi tty, kegunaannya sebagai GUI terbatas; itu tidak sepenuhnya benar, Anda memerlukan pengaya itu untuk mendapatkan output grafis jika Anda tidak keberatan menggunakan assembler untuk mem-bypass syscall sebagaimana diperlukan.
sumber
GUI adalah abstraksi tingkat tinggi dari kemampuan, sehingga hampir semuanya dari server XOrg ke OpenGL porting lintas-platform, termasuk untuk platform Windows. Tetapi jika dengan GUI API yang Anda maksud * nix API grafis maka Anda mungkin berkeliaran di "Infrastruktur Direct Rendering".
sumber
Wayland
Seperti yang mungkin Anda dengar, wayland adalah pilihan utama dari banyak distro belakangan ini, karena protokolnya lebih sederhana daripada X.
Toolkit wayland
Toolkit atau gui library yang disarankan wayland adalah:
sumber
Untuk memparafrasekan pertanyaan awal:
P. Apa yang setara dengan Linux dari antarmuka pemrograman aplikasi Microsoft dan Apple?
A. "Linux Kernel API." https://www.kernel.org/doc/htmldocs/kernel-api
sumber