Skip to content

emka.web.id

Menu
  • Home
  • Indeks Artikel
  • Tutorial
  • Tentang Kami
Menu

Modul Kompositor "COMO" Untuk Membangun Kompositor Wayland Telah Tiba

Posted on March 04, 2024 by Syauqi Wiryahasana


Pengembang sumber terbuka Roman Gilg yang terkenal dengan karyanya di KWinFT sebelum melakukan rebranding menjadi Kapal Theseus memiliki beberapa berita penting untuk dibagikan hari ini melalui Phoronix. Inilah postingan tamunya yang mengumumkan The Compositor Modules.



Minggu lalu Phoronix melaporkan bahwa KWinFT diganti namanya menjadi Theseus` Ship, namun juga akan ada "sesuatu yang lebih besar" untuk segera dibicarakan.



Waktunya telah tiba sekarang. Saya dengan senang hati mengumumkan secara eksklusif di Phoronix rilis pertama The Compositor Modules - atau singkatnya COMO, koleksi perpustakaan C++ untuk menulis kompositor Wayland dan X11 dengan mudah.





Rilisan pertama sekarang tersedia di GitHub. Izinkan saya memberi Anda tur tentang apa yang dapat Anda harapkan dari perpustakaan ini. Sebuah perpustakaan yang saya yakini akan mengisi celah besar dalam ekosistem Wayland.






Tulis Kompositor Wayland Anda seperti X11 One


Hadapi saja: membuat kompositor Wayland itu sulit! Terutama jika Anda hanya ingin menerapkan logika windowing khusus. Anda masih memerlukan antara lain:

render tumpukan melalui beberapa API grafis dan tumpukan DRMinput melalui libinputmanajemen tampilan melalui DRMdrag-and-drop yang memediasi antara logika klien untuk operasi yang lebih tinggi seperti tangkapan layar dan kemungkinan besar seluruh window manager X11 secara internal untuk Xwayland.

Menulis window manager X11 sebagai perbandingan jauh lebih mudah! Anda tidak perlu melakukan semua itu karena XServer sudah melakukannya untuk Anda. Namun di sisi lain yang tentunya tidak kita inginkan lagi sekarang adalah Wayland adalah monster monolitik seperti XServer dulu. Solusi yang jelas adalah membangun perpustakaan dukungan untuk menghubungkan dan menyederhanakan pembuatan kompositor.



Sudah ada beberapa opsi untuk itu:

wlrootslibwestonMirQt Wayland CompositorLouvre (baru) Saya yakin Modul Compositor jauh lebih cocok untuk dengan mudah mengembangkan kompositor Wayland yang kaya fitur daripada modul yang sudah ada karena dua alasan sederhana. Yang pertama adalah untuk menulis kompositor Wayland Anda sendiri, yang Anda perlukan hanyalah tiga baris kode CMake dan fungsi utama ini:



int utama(int argc, char* argv[]) { menggunakan namespace como; base::wayland::app_singleton aplikasi(argc, argv); menggunakan base_t = base::wayland::platform; base_t base({.config = base::config(KConfig::OpenFlag::FullConfig, "kwinft-minimalrc")}); base.mod.render = std::make_unique(base); base.mod.input = std::make_unique(base, input::config(KConfig::NoGlobals)); base.mod.space = std::make_unique(*base.mod.render, *base.mod.input); kembali base::wayland::exec(base, app); }

Seperti yang ditunjukkan oleh MVP Minico kami.



Alasan kedua adalah Modul Compositor dimaksudkan untuk berguna sama dalam sesi desktop yang kaya fitur serta kasus penggunaan minimal yang tertanam. Biarkan saya memperluas ini lebih jauh.






Dari Desktop Besar


Meskipun Modul Kompositor menggunakan wlroots di backend, sisi protokol Wayland mereka tidak didasarkan pada wlroots tetapi Wrapland. Hal ini disebabkan oleh fakta bahwa Modul Compositor seharusnya mendukung pembuatan compositor yang berfungsi penuh untuk desktop KDE Plasma, seperti yang ditunjukkan oleh Theseus` Ship.



wlroots tidak mendukung semua protokol yang diperlukan untuk itu. Dan juga tidak menyediakan semua integrasi dengan layanan desktop KDE, aturan dan API skripnya, sistem konfigurasinya, dan yang tak kalah pentingnya, rangkaian fitur pengelola jendela X11 ekstensif yang diharapkan oleh aplikasi lama saat dijalankan di dalam desktop KDE.

KDE Plasma adalah memimpin paket dalam hal fungsionalitas.



Hal serupa harus dikatakan tentang pesaing lainnya. Meskipun libweston, Mir, dan Qt Wayland Compositor selalu dikembangkan terutama untuk kasus penggunaan minimal yang tertanam dan hanya setelah dipikir-pikir beberapa di antaranya telah dibuat dapat digunakan dalam kasus penggunaan desktop yang terbatas, Louve sebagai opsi yang lebih baru tampaknya tidak terbatas. oleh bias itu. Tapi ini adalah proyek greenfield dan memperluas fungsionalitas kecil yang sekarang ditawarkannya ke sesuatu yang besar seperti lingkungan desktop KDE dengan semua keunikan dan fiturnya, secara praktis tidak mungkin.



Di sisi lain Modul Compositor dipisahkan dari KWinFT, yang selama ini merupakan garpu KWin. Dengan nenek moyang mereka, mereka mempertahankan tingkat fungsionalitas dan integrasi luar biasa yang sama dengan desktop KDE Plasma yang besar seperti kompositor KDE standar saat ini. Jika Anda mencari pengalaman desktop yang luar biasa tanpa kompromi dan mengutak-atik, saya yakin perpustakaan Wayland mungkin tidak menawarkan lebih sedikit.






To Small Embedded


"Desktop besar" adalah yang ekstrem, tetapi Modul Compositor dibuat untuk mencakup keseluruhan rentang aplikasi untuk kompositor Wayland dari desktop besar seperti KDE melalui desktop yang lebih kecil seperti LXQt hingga aplikasi tertanam. Kasus penggunaan yang tertanam adalah bidang penting bagi Wayland sebagai sebuah teknologi. Dalam hal potensi komersial, ini mungkin merupakan faktor pembeda yang paling penting dari Sistem X Window yang lama, dan jelas beberapa keputusan desain Wayland telah dipengaruhi olehnya.

Embedded adalah bidang yang luas, namun persyaratan tampilan secara umum kurang rumit dibandingkan pada desktop.



Jadi tidak mengherankan juga bahwa dari lima pesaing perpustakaan yang tercantum di atas, ketiga perpustakaan yang didukung secara komersial sangat fokus pada aplikasi yang disematkan.



Tentu saja apa yang mereka tawarkan di area khusus ini valid, tetapi saya tetap yakin Modul Kompositor akan menjadi a solusi yang lebih baik, karena mereka didasarkan pada wlroots dan berbagi intinya dengan kompositor untuk desktop. Poin kedua berarti Anda dapat menguji inti ini di desktop dan mentransfer pengalaman dan pengaturan pengembang Anda langsung ke yang tertanam. Nbsp

Bahwa ini bukan persyaratan kosong ditunjukkan oleh eksperimen seperti yang dilakukan oleh perusahaan MBition, anak perusahaan Mercedes-Benz Grup, yang mencoba menggunakan KWin di Mercedes baru.



Ini adalah eksperimen yang bagus dan ini menunjukkan bahwa ada insentif untuk menggunakan kompositor yang lebih besar dalam kasus seperti itu, tetapi mencapai hal ini secara terbatas dengan kompositor KDE standar akan sulit karena KWin tidak pernah dibuat untuk itu kasus penggunaan semacam ini dan sifat monolitiknya memaksakan kasus penggunaan desktop.



Saya berupaya keras untuk memastikan bahwa Modul Kompositor adalah kebalikannya: modular dan terbuka untuk kasus penggunaan apa pun dari besar hingga kecil.



Mari kita lihat beberapa desain teknis keputusan yang memungkinkan hal ini.






Modular Through C++ Templates


Jika Anda menunjukkan kepada programmer C++ file acak kode sumber dari KWin dan satu dari The Compositor Modules, perbedaan paling mencolok yang akan dia lihat setelah beberapa detik mungkin adalah penggunaan berat pemrograman generik di Modul Compositor.



Sebenarnya saya memindahkan logika sebanyak mungkin untuk waktu kompilasi, bukan hanya karena ini membuat runtime lebih cepat dan kode lebih aman, tetapi juga karena ini memungkinkan kita untuk sepenuhnya memodulasi struktur perpustakaan dalam hal ketergantungan dan opsi untuk konsumen kustomisasi.

Teknik C++ tingkat lanjut memungkinkan integrasi yang mulus antara kode Wayland dan X11.



Mari kita lihat aspek pertama. Anda dapat membuat kompositor Wayland tanpa ketergantungan X11 apa pun hanya dengan *tidak* menautkan ke pustaka como::xwayland yang terpisah. Secara internal hal ini dimungkinkan oleh beberapa templat kelas, misalnya ruang semua jendela dibuat templat pada `std::variant` jenis jendela.



Dan jika Anda tidak memerlukan Xwayland, maka Anda cukup menggunakan spasi tanpa varian tipe jendela X11. Ini semua dilakukan pada waktu kompilasi, memanfaatkan semua jaminan keamanan sistem tipe C++ dan tanpa penggunaan makro.



Sebagai perbandingan minggu lalu, dukungan untuk build tanpa dependensi libxcb juga telah digabungkan ke dalam KWin. Namun karena arsitektur monolitik KWin, ini memerlukan banyak penggunaan makro. Nbsp Mari kita lihat aspek kedua, opsi penyesuaian. Saat Anda membuat kompositor Wayland dengan The Compositor Modules, Anda memiliki opsi tak terbatas untuk menyesuaikan kompositor Anda dengan melakukan subtipe melalui pewarisan virtual atau bahkan dengan mengganti tipe sepenuhnya dengan tipe kustom Anda sendiri.



Seperti yang dikatakan, semuanya sudah diberi template, jadi Anda bisa memperkenalkan milik Anda sendiri ruang untuk memiliki logika berbeda untuk memposisikan jendela, atau Anda menyediakan fungsi gratis yang berbeda hanya untuk mengubah satu aspek saja.



Kode Modul Kompositor telah banyak difaktorkan ulang untuk memisahkan logika dari data. Hal ini memungkinkan penggantian fungsi pembantu khusus tipe tersebut.



Atau Anda memulai sedikit lebih kecil dengan penyesuaian Anda, dengan membatasi hal-hal yang Anda kompilasi. Misalnya kode Minico di atas menghilangkan penambahan bidang skrip ke struct base.mod. Ini adalah sesuatu yang dilakukan oleh Kapal Theseus di sisi lain. Menghilangkan penambahan bidang ini berarti menghilangkan kompilasi seluruh modul skrip. Dengan cara ini, secara deklaratif sederhana, kami menjelaskan fungsionalitas apa yang akan ditawarkan oleh kompositor kami dan apa yang tidak akan ditawarkannya.






Modular Melalui CMake Modern


Modularitas melalui templat adalah satu hal. Namun saat kami menyediakan koleksi perpustakaan, tujuan modularitas perlu didukung melalui penggunaan teknik CMake modern. Banyak pekerjaan pada tahun lalu yang dilakukan untuk memodulasi tidak hanya kode tetapi juga struktur perpustakaan di belakangnya. Saya mencapai hal ini melalui penggunaan teknik CMake modern secara konsisten dan pengungkapan ketergantungan internal dan eksternal yang cermat. Pada akhirnya untuk kompositor Wayland, hierarki relasi berikut muncul:





Mengikuti grafik ini kita dapat dengan mudah melihat modul perpustakaan mana yang bergantung satu sama lain. Kode CMake secara langsung mendokumentasikan dan memastikan bahwa.



Melalui penggunaan kode CMake berbasis target modern, bahkan satu penyertaan header yang salah akan langsung terungkap. Misalnya penggunaan jenis *render* apa pun dari dalam modul *input* tidak mungkin dilakukan, karena modul input hanya tertaut ke modul *win*.



Untuk pengembangan Modul Compositor di masa mendatang, hubungan ketergantungan ini memudahkan pelacakan bug dan cakupan fitur. Bagi konsumen The Compositor Modules, dependensi memberikan struktur yang masuk akal untuk mendasarkan asumsi mereka tentang fungsionalitas perpustakaan dan penyesuaiannya.






Kualitas dan Otomatisasi Kode Tinggi


Saat menyediakan perpustakaan seperti The Compositor Modules, penting untuk memenuhi standar modern dalam hal keamanan kode dan kebenaran.



Ini telah menjadi tujuan sejak awal dan saat ini setiap perubahan kode dikompilasi di CI dengan semua peringatan kompiler diaktifkan sebagai kesalahan. Kami melakukan ini secara paralel dengan GCC dan Clang.



Juga berdasarkan permintaan tarik, rangkaian pengujian yang saat ini terdiri dari lebih dari 100 pengujian aktif harus lulus. Dengan cara ini dipastikan cabang master selalu "hijau", kriteria penting untuk kode bebas regresi.

GitHub Tindakan dieksekusi pada permintaan tarik untuk Modul Compositor.



Tentu saja ini tidak membuat bug menjadi tidak mungkin, tetapi dalam jangka panjang merupakan mekanisme penting untuk meningkatkan stabilitas. Bahwa terdapat perubahan besar dan mendasar dalam basis kode selama bertahun-tahun, sementara pada saat yang sama dimungkinkan untuk mempertahankan fungsionalitas keseluruhan dan terus mengikuti perubahan pada KWin serta komponen KDE lainnya untuk transisi Plasma 6 , merupakan bukti akan hal itu.






Berikutnya: Fitur Lainnya


Dengan dirilisnya Modul Compositor, bagian yang sulit telah selesai sekarang. Struktur perpustakaan keseluruhan yang mendasari dengan abstraksi yang diperlukan telah ditetapkan.



Fokusnya sekarang dapat dialihkan ke stabilisasi dan lebih banyak pekerjaan fitur. Meskipun Modul Compositor sudah menyediakan serangkaian fitur yang besar, masih ada beberapa fitur penting yang hilang seperti yang didokumentasikan dalam tabel fitur Wayland.



Beberapa fitur ini kemungkinan dapat di-porting secara langsung atau setidaknya sebagian dari KWin, yang menerima banyak pendanaan eksternal di KWin tahun terakhir untuk menambahkan fitur. Kabar baiknya adalah mengimplementasikan fitur-fitur baru relatif mudah, ketika implementasi referensi sudah tersedia.



Fitur lainnya akan memerlukan lebih banyak integrasi dengan wlroots, sesuatu yang saya nantikan karena wlroots adalah proyek yang hebat dan sangat bergantung pada dorongannya untuk penyatuan yang lebih besar dan penggunaan kembali kode di ekosistem Wayland.






Berikutnya: Lebih Banyak Konsumen


Rilis pertama The Compositor Modules tentu saja masih belum stabil. Stabilisasi akan memakan waktu. Namun saya masih percaya, karena setelah semua refactor besar selesai sekarang dan struktur umum telah ditetapkan, ini adalah saat yang tepat untuk mendasarkan proyek kompositor eksperimental pada Modul Compositor.



Modul Compositor harus sangat cocok untuk desktop seperti LXQt, XFCE atau Cinnamon, yang memerlukan solusi pengomposisian yang dibuat khusus di Wayland. Sebuah solusi yang di satu sisi cukup terbuka untuk beradaptasi dengan kebutuhan mereka dan di sisi lain menyediakan fitur yang cukup untuk tidak menghabiskan sumber daya kontributor terlalu tipis.



Saat ini saya sedang mencari cara untuk membangun solusi seperti itu dengan The Modul Kompositor untuk LXQt. LXQt adalah proyek yang menarik bagi saya karena merupakan solusi desktop lengkap seperti KDE Plasma, tetapi dengan rangkaian fitur yang kurang ekstensif. Jadi compositor untuk LXQt akan menunjukkan bagaimana seseorang dapat dengan sengaja dan selektif mengurangi fungsionalitas saat menggunakan The Compositor Modules.






Berikutnya: Lebih Banyak Pendanaan


Mari kita menjadi nyata: proyek besar seperti The Compositor Modules tidak dapat dipertahankan dalam jangka panjang secara berkelanjutan tanpa adanya perusahaan dukungan finansial.



Dalam dua tahun terakhir saya mengerjakan proyek ini di waktu luang saya, bersamaan dengan pekerjaan saya sebagai pekerja lepas. Saya mampu mempertahankan beban kerja tersebut, namun Anda tidak dapat melakukannya selamanya dan Anda tidak dapat mengharapkan hal tersebut dari setiap kontributor, yang ingin memberikan lebih dari beberapa baris kode untuk proyek tersebut. Itu berlaku untuk The Compositor Modules seperti halnya untuk proyek besar lainnya seperti KWin.



Tetapi The Compositor Modules sekarang memberikan dasar yang bagus untuk membangun kompositor Wayland untuk semua jenis aplikasi, dari berbagai varian desktop Linux hingga produk yang disematkan.



Harapan saya adalah bahwa ada perusahaan yang bersedia mendukung secara finansial pembuatan perpustakaan Wayland seperti The Compositor Modules. Pustaka yang tidak hanya dimaksudkan untuk menyelesaikan kasus penggunaan spesifik perusahaan saat ini, baik dengan solusi minimal seperti Minico, solusi dengan tipe khusus, atau solusi dengan rangkaian fitur maksimal seperti Kapal Theseus. Tapi perpustakaan, yang akan meningkatkan arus untuk semua kapal.



Tentang Pengarang: Roman Gilg adalah seorang arsitek perangkat lunak dengan kontribusi penting pada banyak proyek sumber terbuka. Dia juga telah melakukan pekerjaan industri pada sistem yang kompleks, paling sering memanfaatkan C++. Selain itu ia juga seorang insinyur platform dan manajer proyek yang berpengalaman. Saat ini dia mempelopori proyek WinFT dengan tujuan menyediakan solusi tampilan umum untuk desktop Linux dan tertanam. Dia dapat diikuti melalui Twitter atau LinkedIn.



Itulah berita seputar Modul Kompositor "COMO" Untuk Membangun Kompositor Wayland Telah Tiba, semoga bermanfaat. Disadur dari Phoronix.com.
Seedbacklink

Recent Posts

TENTANG EMKA.WEB>ID

EMKA.WEB.ID adalah blog seputar teknologi informasi, edukasi dan ke-NU-an yang hadir sejak tahun 2011. Kontak: kontak@emka.web.id.

©2024 emka.web.id Proudly powered by wpStatically