Apakah API GUI asli Linux itu?

441

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?

David Colson
sumber
46
Joni benar: "Di Linux antarmuka pengguna grafis bukan bagian dari sistem operasi ... X Window System mendefinisikan protokol jaringan untuk [kemampuan GUI]. Pustaka toolkit seperti Gtk + (digunakan oleh Gnome) dan QT (digunakan oleh KDE), dibangun di atas Xlib. "
paulsm4
33
sebaliknya, David, ini adalah pertanyaan luar biasa
amfibi
7
Saya setuju - Saya sudah membaca "Linux Programming API" dan "System Programming ... Unix" yang merupakan dua Alkitab di kernel & API, dan pertanyaan ini tidak pernah terpikir oleh saya :) Jawabannya menarik.
John Humphreys - w00te
10
Win32 API juga lintas-platform jika Anda memasukkan Wine ..
Brendan Long
2
BTW Windows memiliki subsistem WIN32 / WIN64 yang menerapkan banyak hal yang sama untuk 'Windows Look and Feel - alias WIN32' di antara hal-hal lain. Subsistem ini beroperasi di atas kernel NT. API untuk ini berbeda. Misalnya C: adalah abstraksi WIN32, bukan kernel NT. Sama untuk beberapa fungsi windowing. Windows juga memiliki subsistem Unix yang tersedia (yang mendukung X11 sampai tingkat tertentu).
Preet Sangha

Jawaban:

603

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.

Joni
sumber
95
+1. Sejak kapan sistem operasi harus memiliki GUI, menyiratkan bahwa jika bukan itu OS? Omong kosong.
David Hammen
42
Bahkan Windows pada awalnya hanyalah sebuah program yang berjalan di atas DOS.
dan04
2
+1 @DavidHammen Saya tidak yakin apakah itu ditujukan kepada saya atau tidak, tetapi Anda 100% benar. Terminologi saya tidak sepenuhnya akurat. Apa yang seharusnya saya katakan adalah bahwa itu bukan sistem operasi penuh dengan cara yang biasa Anda pikirkan tentang OS dengan semua komponen tambahan yang membuatnya mudah digunakan, melainkan konglomerasi komponen dari vendor yang berbeda, dll.
Chris Thompson
3
@ ChrisThompson - hmm ... mungkin aku terlalu tua tapi aku tidak pernah menganggap GUI sebagai bagian inti dari OS. Dan saya tidak pernah memikirkan OS tanpa GUI hanya sebagai "konglomerasi komponen dari vendor yang berbeda, dll." Tapi, hei, mungkin banyak hal telah berubah sejak saya membentuk pendapat saya tentang apa yang merupakan OS :)
George Hawkins
2
Kecuali jika jawabannya adalah wiki komunitas, saya tidak akan mengubah konten apa pun, selain meningkatkan tata bahasa / pemformatan atau menambahkan tautan. Jika konten perlu diperbaiki atau diperbarui, itu adalah tanggung jawab orang yang reputasinya terikat pada konten tersebut. Namun saya akan melakukannya untuk mengomentari, sehingga mereka menjadi sadar bahwa saya pikir ada sesuatu yang perlu diperbaiki atau diperbarui.
Jujur Abe
84

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.

Chris Thompson
sumber
6
Mereka dibangun di atasnya. X11 adalah server, sementara KDE, Gnome dll. Adalah manajer desktop, menyediakan API tingkat tinggi, tata letak jendela umum, dll.
Tandai
7
X11 adalah lapisan tingkat rendah yang sebenarnya yang menangani semua hal ini dan menangani menggambar ke layar dll (dan berkomunikasi dengan driver grafis). Gnome / KDE kemudian kontrol X11. Itu tentang hal itu pada tingkat tinggi dan mengabaikan satu miliar dan satu detail.
slugonamission
3
Terima kasih. satu pertanyaan lagi: wikipedia menjelaskan bahwa X11 "membuat lapisan abstraksi perangkat keras tempat perangkat lunak ditulis untuk menggunakan seperangkat perintah umum, yang memungkinkan independensi perangkat dan penggunaan kembali program di komputer mana pun yang mengimplementasikan X." pertanyaan saya adalah: mengapa X11 menyediakan interaksi perangkat keras (HAL), haruskah Kernel Linux menyediakannya dan X11 beroperasi di atas Kernel? Dengan kata lain, mengapa X11 menjangkau perangkat perangkat keras ketika Kernel seharusnya menjadi proxy-nya?
amfibi
1
Saya pikir dalam hal HALini 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.
Chris Thompson
4
X11 adalah protokol jaringan. Abstraksi melibatkan penulisan program pada platform A yang dapat menampilkan klien X11 (windows, apps, dll) pada platform B melalui beberapa peralatan jaringan. Aplikasi Anda dapat berjalan secara lokal, jarak jauh, di server bersarang, di server virtual yang hanya melakukan VNC, dll. Abstraksi perangkat keras (pada platform lokal) adalah efek samping dari fitur ini, tetapi juga mengaburkan garis antara X11 dan kernel (yang melakukan abstraksi perangkat keras pada sistem Unix rata-rata).
Alexios
59

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.

tidak ada
sumber
2
Diagram arsitektur tingkat tinggi untuk Wayland sama dengan X, kecuali bahwa "Kompositor" dan "Server" dalam diagram X digabungkan dalam diagram Wayland. Yang kurang adalah penjelasan yang masuk akal mengapa integrasi ini tidak dapat dikerjakan ke X.
Kaz
1
baik, saya akan mengatakan itu tidak mudah mengubah desain dasar basis kode 20+ tahun. Perhatikan juga bahwa masalah lain dengan X11 adalah sebagian besar fungsinya seperti rendering font tidak digunakan hari ini. Ditambah X11 masih akan dibutuhkan di server dan superkomputer, transparansi jaringan terlalu bagus untuk dilepaskan.
tidak ada
3
@gokcehan wayland tidak menghilangkan transparansi jaringan, itu hanya mitos. Ini tidak dilaksanakan belum , seperti banyak hal lain di Wayland. wayland.freedesktop.org/faq.html#heading_toc_j_8 blog.martin-graesslin.com/blog/2011/08/... dll.
whitequark
8
+! untuk menyebutkan kekurangan Android X11. Android mungkin merupakan contoh tandingan paling meyakinkan untuk argumen bahwa "x11 adalah GUI linux asli". Menunjukkan bahwa Linux dapat memiliki x11 atau Android karena itu "asli" GUI menunjukkan kepada pemula bahwa Linux benar-benar hanya sebuah kernel dan tidak selalu memiliki GUI.
Trevor Boyd Smith
"Menjadi lintas platform tidak ada hubungannya dengan menjadi asli" adalah poin yang sangat baik. Saya telah menggunakan pola itu sangat sering selama bertahun-tahun porting lintas-platform. Terutama, di tahun 90-an, saya menjual kerangka kerja yang memungkinkan Anda mengkompilasi silang kode yang dituliskan ke kerangka PowerPlant Metrowerks menggunakan MFC di bawah tenda. (Sebelum ada orang yang mencibir, setelah Anda mendapatkan di bawah makro, MFC cukup masuk akal.) Saya juga punya beberapa pekerjaan porting di mana Win32 atau Mac Toolbox API adalah spesifikasi yang kami susun, jalankan kembali sebagaimana diperlukan pada platform lain. .
Andy Dent
23

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.

nibot
sumber
3
Jawaban ini ditulis ketika pertanyaannya adalah "Apa itu API asli linux?" (sejak itu, "GUI" telah dimasukkan ke dalam pertanyaan).
nibot
Itu masih jawaban yang tepat untuk apa yang sekarang menjadi pertanyaan yang tidak jelas karena tidak ada sistem yang berada di atas Linux, termasuk GNU dan X11, yang "asli" dalam arti yang berarti.
Jim Balter
20

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

Mat
sumber
habrahabr.ru/post/148954 - (dalam bahasa Rusia) terjemahan dari posting itu jika ada yang membutuhkan
Boris Burkov
9

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

Menandai
sumber
5

XWindows mungkin adalah yang paling dekat dengan apa yang bisa disebut 'asli' :)

Sergey Sirotkin
sumber
3
apakah itu sama dengan x11?
DavidColson
1
Tetapi jika Anda menggunakannya secara langsung, Anda akan melihat itu bukan api GUI ... Linux tidak memiliki 1 api GUI asli. Tetapi hampir semua API GUI (setidaknya yang umum di desktop linux hari ini) berjalan di atas X. Jika Anda mulai menulis aplikasi menggunakan X lama, hari ini, itu akan terlihat benar-benar tidak pada distro modern, jadi saya akan katakanlah GUI asli bergantung pada distribusi - gtk / gnome untuk ubuntu, kde untuk yang lain.
Axel
1

Hal yang paling dekat dengan Win32 di linux adalah libc, seperti yang Anda sebutkan tidak hanya UI tetapi acara dan "hal-hal os lainnya"

Midhat
sumber
5
libc (pustaka standar C) adalah antarmuka untuk panggilan sistem OS. Yang terakhir (panggilan sistem OS) di Linux yang secara kasar diterjemahkan ke Win32 di Windows. Anda tidak dapat benar-benar (atau sama sekali?) Program untuk versi Windows saat ini tanpa pada tingkat tertentu menggunakan Win32 API, tetapi Anda dapat memprogram untuk Windows dan Linux tanpa menggunakan pustaka C standar masing-masing kompiler, hanya dengan menduplikasi direktori langsung. kode to-syscalls. Itu tidak direkomendasikan, dan itu membuat kode Anda sepenuhnya tidak dapat diakses ke OS lain, tetapi itu mungkin dilakukan.
CVn
UI bukan bagian dari libc - selama Anda tidak menganggap printf / scanf dan sejenisnya sebagai UI ... libc hanyalah pustaka standar C. Dan itu juga bukan antarmuka untuk panggilan sistem OS. Ini menyediakan fungsi untuk file i / o, manajemen memori, pemrosesan string dll. Dan secara internal menggunakan panggilan sistem. Untuk membuat panggilan sistem seperti ioctlAnda sendiri, Anda harus memasukkan sesuatu dari sys/.
Axel
Pertanyaannya tidak selalu menentukan "GUI".
jv110
Mungkin Anda berbicara tentang Xlibtidak libc.
i486
1

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.

M. Ziegast
sumber
0

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".

Chawathe Vipul S
sumber
0

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:

  • QT 5
  • GTK +
  • LSD
  • Kekacauan
  • EFL
Amir Fo
sumber
0

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

pengguna11545776
sumber