Pada musim gugur tahun ini, setelah 6 tahun pengembangan, versi beta pertama "R1 / beta1" dari sistem operasi
Haiku dirilis. Saya telah mengikuti proyek yang menarik ini sejak lama, yang bertujuan untuk menciptakan kembali dan mengembangkan sistem
BeOS yang ada pada 1994-2000. Karena itu, segera setelah saya melihat berita tentang rilis versi beta Haiku di situs berita TI, saya segera memutuskan untuk melihat apa yang ditambahkan ke rilis yang telah lama ditunggu-tunggu ini. Setelah menginstal sistem di mesin virtual
VirtualBox dan sedikit pengenalan dengan fungsi dasarnya, saya pikir akan menyenangkan untuk membantu komunitas OpenSource, yang sedang mengembangkan sistem operasi ini, sedikit hari ini. Saya memutuskan untuk memulai dengan apa yang telah saya dapatkan sedikit pengalaman dalam: porting beberapa proyek game.
Desktop sistem operasi Haiku.Kemudian, saya mencoba memperbaiki beberapa aplikasi dan perpustakaan yang ada. Ini adalah aktivitas kecil saya di berbagai repositori open source yang akan dikhususkan untuk artikel ini. Di dalamnya, saya akan secara konsisten menggambarkan masalah yang saya temui dan berbicara tentang metode untuk menyelesaikannya. Saya mencoba mengirim sebagian besar tambalan yang dibuat selama pekerjaan ini ke
hulu proyek yang ada untuk memberikan dukungan Haiku di dalamnya dan menarik minat pengembang mereka dengan adanya sistem operasi alternatif.
Sistem operasi Haiku menggunakan
inti hibrida , yang merupakan implementasi arsitektur microkernel dengan kemampuan untuk memuat modul yang diperlukan secara dinamis. Ini didasarkan pada garpu kernel
NewOS , yang dikembangkan oleh mantan insinyur
Be Inc. , Oleh Travis Geiselbrecht. Saat ini, pengembang ini bekerja di Google pada kernel yang disebut
Zircon untuk sistem operasi
Google Fuchsia yang baru, tetapi itu adalah cerita lain. Jadi, karena pengembang Haiku menyatakan kompatibilitas biner dengan BeOS, mereka dipaksa untuk mendukung bukan dua cabang arsitektur yang akrab, tetapi tiga: x86_64, x86 dan x86_gcc2. Arsitektur yang terakhir adalah beban kompatibilitas dengan penyusun versi lama
GCC 2.95. Berkat dia, dimungkinkan untuk menjalankan aplikasi yang ditulis untuk sistem operasi BeOS yang asli. Sayangnya, karena beban kompatibilitas ini, pengembang Haiku tidak dapat menggunakan fitur modern bahasa pemrograman C ++ di API sistem. Namun, mereka menyiapkan gambar instalasi hanya untuk dua arsitektur: x86_64 dan x86. Masalahnya adalah bahwa distribusi Haiku untuk x86 adalah hybrid: terlepas dari kenyataan bahwa semua komponen sistem dibangun di bawah x86_gcc2 untuk kompatibilitas biner, pengguna diberi kesempatan untuk menginstal atau membangun aplikasi modern apa pun yang telah dirancang untuk kompiler modern dan arsitektur x86 . Distribusi Haiku untuk arsitektur x86_64 sepenuhnya 64-bit dan tidak memiliki kemampuan untuk menjalankan aplikasi BeOS dan Haiku 32-bit. Namun, ada kompatibilitas di tingkat API, jadi jika Anda memiliki kode sumber aplikasi di bawah BeOS atau Haiku x86, Anda dapat dengan mudah mengompilasinya di bawah Haiku x86_64 dan semuanya akan berfungsi. Gambar sistem operasi untuk arsitektur x86_64 direkomendasikan untuk instalasi pada perangkat keras nyata jika Anda tidak memerlukan dukungan untuk aplikasi BeOS tertentu atau aplikasi Haiku 32-bit.
Perlu dikatakan bahwa dalam sistem operasi ini ada dukungan parsial untuk standar
POSIX . Yayasan ini membuatnya mirip dengan sistem mirip UNIX dan membuatnya mudah untuk port perangkat lunak mereka. Bahasa pemrograman utama adalah C ++, ini digunakan secara aktif, karena API publik Haiku terutama mengejar paradigma pemrograman berorientasi objek. Namun demikian, tidak ada yang melarang penggunaan bahasa pemrograman C, hanya untuk sebagian besar kasus perlu untuk menulis lapisan kompatibilitas yang sesuai. Antarmuka perangkat lunak sistem operasi dikelompokkan ke dalam kerangka kerja sistem terpisah yang bertanggung jawab atas peluang tertentu, misalnya untuk antarmuka atau dukungan jaringan. Ini agak seperti apa yang tersedia di
macOS atau dalam kerangka
Qt . Pastikan untuk mencatat bahwa sistem operasi ini adalah pengguna tunggal, meskipun ada beberapa kemajuan dalam menyediakan mode kerja multi-pengguna untuk pengembang Haiku.
Saya tidak bisa tidak berbagi dengan pembaca artikel ini pengalaman positif menggunakan sistem manajemen jendela aplikasi canggih yang tersedia di Haiku. Menurut pendapat saya, ini adalah salah satu yang paling nyaman dan dalam caranya adalah ciri khas OS ini.
Manajemen jendela canggih dalam sistem operasi Haiku: dukungan untuk ubin dan tab.Windows dapat dikencangkan bersama di dalam tab, seperti yang dilakukan di peramban modern, saling menempel dan dengan mudah diubah ukurannya.
Ubin sederhana , mentransfer konteks beberapa aplikasi dari satu jendela ke jendela lain, dan
replika didukung. Anda dapat membaca lebih lanjut tentang semua fitur sistem jendela lokal di
dokumentasi resmi , di sana semua tombol pintas yang diperlukan dijelaskan di sana.
Saya tidak akan menulis dalam artikel ini tinjauan lengkap dari semua fitur dan kemampuan Haiku, karena mereka yang tertarik akan dapat dengan mudah menemukan informasi yang diperlukan di Internet sendiri.
Konten:
1. Paket dan repositori di Haiku2. Langkah-Langkah Pertama: Porting Adamant Armor Affection Adventure3. Modifikasi port NXEngine yang ada (Cave Story)4. Porting the Gish game5. Proyek BeGameLauncher, yang memungkinkan Anda membuat peluncur untuk game dengan cepat6. Porting Xash3D: Game Half-Life Legendaris dan Pengaya Resmi7. Porting dua bagian dari permainan Serious Sam: The First Encounter dan The Second Encounter8. Porting the Vangers game9. Implementasi dialog di perpustakaan SDL2 untuk Haiku10. Porting garpu Pembaca Keren saya11. Finalisasi program KeymapSwitcher12. Kesimpulan1. Paket dan repositori di Haiku
Dibandingkan dengan BeOS asli, sebuah inovasi signifikan telah muncul di Haiku: sistem manajemen paket yang mencakup berbagai alat untuk memperoleh dan menginstal perangkat lunak dari berbagai sumber. Sumber tersebut dapat berupa repositori resmi
Haiku dan
HaikuPorts , repositori tidak resmi, dan hanya memisahkan dan menyiapkan paket HPKG. Kemampuan untuk menginstal dan memperbarui perangkat lunak seperti itu telah lama dikenal di dunia sistem operasi mirip Unix, tetapi sekarang semua kekuatan dan kenyamanannya telah berhasil mencapai Haiku, yang tidak dapat menyenangkan para pengguna biasa sistem operasi ini. Berkat infrastruktur yang dibangun di sekitar manajer paket, sekarang setiap pengembang dapat dengan mudah melakukan port baru atau memodifikasi aplikasi open source yang ada, kemudian menambahkan hasil pekerjaan mereka ke repositori port perangkat lunak HaikuPorts, setelah itu mereka akan tersedia untuk semua pengguna Haiku. Akibatnya, ekosistem yang dihasilkan menyerupai sistem operasi macOS dengan
Homebrew mereka, FreeBSD dengan
porta mereka, Windows dengan
MSYS2 atau Arch Linux dengan
AUR -nya.
Alat untuk membangun paket dan perangkat lunak porting, yang disebut
HaikuPorter , disediakan secara terpisah dari sistem operasi dan diinstal menggunakan
manual kecil yang terletak di repositori di GitHub. Setelah menginstal utilitas ini dari GitHub yang sama, seluruh pohon resep diunduh, yang sedang dikerjakan pengembang. Resepnya adalah skrip Shell biasa dengan instruksi di mana HaikuPorter akan mengumpulkan paket HPKG yang diperlukan. Patut dicatat bahwa alat itu sendiri ditulis dalam
bahasa pemrograman
Python 2, berinteraksi erat dengan sistem manajemen paket yang ada, dan menggunakan alat standar
Git secara internal untuk memperbaiki perubahan pada kode sumber perangkat lunak dan menghasilkan seperangkat tambalan. Berkat tumpukan teknologi ini, membuat resep untuk membuat paket HPKG dan tambalan perangkat lunak dalam bentuk file tambalan sangat mudah dan sederhana. Dalam kebanyakan kasus, saya harus menggunakan hanya tiga perintah ketika bekerja dengan HaikuPorter:
alias hp="haikuporter -S -j4 --get-dependencies --no-source-packages" hp libsdl2 hp libsdl2 -c hp libsdl2 -e
Perintah pertama hanya mengumpulkan paket yang dipilih, perintah kedua membersihkan direktori build, dan yang ketiga membuat atau memperbarui satu set tambalan sesuai dengan perubahan Anda yang dicatat dalam repositori Git direktori kerja melalui komit.
Dengan demikian, untuk menerbitkan paket ke repositori HaikuPorts dan membuatnya tersedia untuk semua pengguna Haiku, pengembang harus menginstal HaikuPorter, memperluas pohon resep, mengumpulkan paket HPKG secara lokal dan mengujinya, kemudian berkomitmen pada cabang pohon resepnya. lalu buat
permintaan Tarik di GitHub. Pengembang Haiku harus mempertimbangkan karya yang dipublikasikan, setelah itu mereka memutuskan untuk menggabungkan perubahan Anda ke dalam repositori atau mengirimnya untuk direvisi. Jika perubahan diterima, maka HaikuPorter yang sama yang diinstal pada server build akan mengumpulkan paket dari jarak jauh dan secara otomatis menerbitkannya ke repositori.
Program
HaikuDepot khusus ditambahkan ke versi beta "R1 / beta1" dari sistem operasi Haiku, yang memungkinkan bekerja dengan paket dan repositori melalui antarmuka pengguna grafis, daripada melalui perintah konsol di terminal.
Program HaikuDepot berjalan pada sistem operasi Haiku.Berkat alat ini, pengguna Haiku yang belum berpengalaman dan pemula dapat dengan mudah mengelola basis paket mereka. Perlu dicatat bahwa aplikasi ini tidak hanya shell GUI atas manajer paket yang ada, tetapi juga mengimplementasikan fungsionalitas tambahan. Misalnya, pengguna yang berwenang dapat memberi peringkat dan menulis ulasan pada paket yang tersedia untuk instalasi. Selain itu, HaikuDepot memiliki situs
Web Haiku Depot khusus yang memungkinkan Anda melihat perubahan paket di Internet atau mengunduh paket HPKG individual.
<< Lompat ke konten2. Langkah-Langkah Pertama: Porting Adamant Armor Adventure Sayang
Setelah saya berkenalan dengan fungsionalitas sistem operasi di mesin virtual VirtualBox, saya memutuskan untuk mengevaluasi perpustakaan SDL2 di dalamnya dan port game
Adamant Armor Affection Adventure ke Haiku, yang saya tulis tentang mentransfer ke platform Android sebelumnya. Membangun program tidak memerlukan perubahan apa pun pada kode sumber, saya hanya menginstal semua alat yang diperlukan, pustaka, file header mereka dari repositori dan melakukan yang berikut:
cmake -DCMAKE_BUILD_TYPE=Release -DGLES=off -DANDROID=off -DCMAKE_C_FLAGS="-D__linux__" -DSDL2_INCLUDE_DIR=`finddir B_SYSTEM_HEADERS_DIRECTORY` -DSDL2_MIXER_INCLUDE_DIR=`finddir B_SYSTEM_HEADERS_DIRECTORY` ../aaaa/src/main/cpp cmake --build .
= off -DCMAKE_C_FLAGS = "- D__linux__" -DSDL2_INCLUDE_DIR = `finddir B_SYSTEM_HEADERS_DIRECTORY` -DSDL2_MIXER_INCLUDE_DIR =` finddir B_SYSTEM_HEADERS_DIRECTORY` ../aaaa/src/main/cpp cmake -DCMAKE_BUILD_TYPE=Release -DGLES=off -DANDROID=off -DCMAKE_C_FLAGS="-D__linux__" -DSDL2_INCLUDE_DIR=`finddir B_SYSTEM_HEADERS_DIRECTORY` -DSDL2_MIXER_INCLUDE_DIR=`finddir B_SYSTEM_HEADERS_DIRECTORY` ../aaaa/src/main/cpp cmake --build .
Karena Haiku memiliki POSIX, -D__linux__ atau
-D__unix__ mendefinisikan banyak masalah yang berhubungan dengan mendefinisikan platform. Namun, perlu dicatat bahwa yang terbaik adalah meninggalkan penggunaannya dan mengimplementasikan dukungan Haiku dalam kode sumber proyek jika ada masalah pembangunan yang serupa. Memanggil utilitas sistem
finddir dengan argumen khusus memungkinkan Anda mendapatkan jalur yang benar ke file header untuk berbagai arsitektur.
Jadi, dengan menjalankan perintah di atas, saya menyusun file yang dapat dieksekusi yang berjalan dengan sempurna, dan permainan bekerja dengan sempurna. Saya pikir itu akan keren untuk mempersiapkan paket HPKG mandiri dengan permainan dan untuk ini saya pergi jauh ke Internet untuk mencari informasi yang saya butuhkan. Kemudian saya tidak tahu tentang alat yang mudah digunakan untuk porting perangkat lunak, seperti HaikuPorter, yang saya tulis di bagian atas, jadi untuk mencapai tujuan saya, saya memutuskan untuk menipu dan membongkar beberapa paket sistem untuk melihat bagaimana itu diatur di dalam dan lakukan dengan analogi.
Di Internet, saya menemukan
informasi yang diinginkan, setelah itu saya membongkar paket sistem acak menggunakan pengarsipan
Expander yang dibangun ke dalam manajer file lokal, menemukan file
.PackageInfo , mengeditnya dan, sesuai dengan struktur aplikasi saya, mengganti file. Kemudian saya hanya menjalankan perintah untuk membangun paket HPKG dan menginstalnya di sistem:
package create -C AAAA/ aaaa.pkg pkgman install aaaa.pkg
Sayangnya, meluncurkan game dari menu "Aplikasi" tidak berhasil. Dengan menjalankan executable di terminal, saya menerima pesan kesalahan yang mengatakan bahwa tidak mungkin menemukan file data yang diperlukan untuk menjalankan dan menjalankan aplikasi. Pada saat yang sama, jika di terminal pergi ke direktori paket aplikasi, maka semuanya dimulai dengan baik. Ini membawa saya pada gagasan bahwa ketika memulai gim dari menu, Anda perlu melakukan perubahan paksa ke direktori aplikasi. Ini bisa dilakukan dengan skrip Shell atau dengan mengubah sumber permainan. Saya memilih opsi kedua dan menambahkan sesuatu yang mirip dengan kode ini:
#ifdef __HAIKU__
Pada awal fungsi start
utama () , yang sepenuhnya menyelesaikan masalah ini dan paket ternyata bisa dikerjakan. Dalam komentar di berita tentang rilis versi beta Haiku di
Linux.org.ru, saya menjatuhkan tautan ke paket rakitan saya dan meminta seseorang untuk mengirim saya ke beberapa komunitas pengguna aktif dari sistem operasi ini, dan kemudian pergi tidur.
Port game Adventure Petualangan Adamant Armor berjalan di Haiku.Di pagi hari seseorang yang menggunakan nama panggilan
3dEyes mengirimi saya email. Ternyata kemudian,
Gerasim Troeglazov , salah satu pengembang Haiku yang aktif dan penulis port framework Qt untuk sistem operasi ini, bersembunyi di balik nama ini. Dia menunjukkan kepada saya repositori HaikuPorts dan memberi tahu saya cara menggunakan utilitas HaikuPorter. Selain itu, ia menulis resep untuk membangun paket HPKG untuk Adamant Armor Affection Adventure dan menambahkannya ke HaikuDepot.
Setelah menganalisis semua perubahan yang dilakukan oleh pengembang ini, saya perhatikan bahwa ada beberapa kekurangan dalam paket yang saya rakit secara manual, misalnya, pengaturannya tidak disimpan, karena direktori yang dipasang dari paket yang diinstal tidak memiliki kemampuan menulis. Masalah dengan pengaturan penulisan atau penyimpanan dalam paket ini diselesaikan dengan elegan dengan bantuan symlink di direktori khusus yang dapat diakses untuk merekam dan dimaksudkan untuk menyimpan data pengguna. Paket saya juga tidak memiliki ikon aslinya sendiri.
Selain itu, saya mengetahui bahwa Haiku tidak memiliki akselerasi perangkat keras grafik 3D, dan OpenGL yang sama dirender secara terprogram menggunakan daya CPU. Untuk aplikasi grafis berat ini, tentu saja, tidak baik, tetapi untuk game yang lebih tua ini lebih dari cukup. Saya bahkan memutuskan untuk secara khusus memeriksa paket game dan menginstal Haiku di laptop lama saya, yaitu pada perangkat keras nyata. Yang mengejutkan saya, gambar Adamant Armor Affection Adventure dibuat begitu cepat sehingga jika saya tidak diberi tahu tentang kurangnya akselerasi perangkat keras, saya tidak akan menyadari bahwa rendering dilakukan oleh prosesor saya.
Sumber Proyek: https://github.com/EXL/AdamantArmorAffectionAdventureSaya menunda pembuatan manual paket HPKG hingga waktu yang lebih baik dan sepenuhnya beralih menggunakan alat HaikuPorter dan menulis resep. Tetapi kadang-kadang ada situasi ketika pembangunan kembali paket secara manual diperlukan. Misalnya, jika HaikuPorter menetapkan versi malam Haiku dalam file
.PackageInfo terlalu tinggi, dan paket tersebut perlu diuji pada versi rilis sistem operasi. Perlu dicatat bahwa itu berkat responsif dan pengalaman Gerasim bahwa saya dapat memahami banyak seluk-beluk membuat paket untuk sistem operasi Haiku dan melanjutkan pekerjaan saya lebih lanjut.
<< Lompat ke konten3. Modifikasi port NXEngine yang ada (Cave Story)
Saya sangat terkejut menemukan resep di repositori HaikuPorts yang mereferensikan fork saya dari mesin
NXEngine untuk game Cave Story , yang telah saya
analisis di
blog saya
untuk waktu yang sangat lama. Resep dan tambalan disiapkan oleh pengembang bernama
Zoltรกn Mizsei , yang menggunakan nama panggilan
ekstrowerk dan merupakan pengelola aktif banyak paket untuk Haiku.
Analisis yang dangkal, menginstal paket dan meluncurkan aplikasi mengungkapkan masalah yang sama seperti yang saya jelaskan di bagian sebelumnya dari artikel ini: save game tidak berfungsi, pengaturan tidak disimpan, dan paket tidak memiliki ikon asli. Saya memutuskan untuk memperbaiki kekurangan-kekurangan ini dan mulai mengerjakan tambalan, pertama-tama mengintegrasikan semua ide para ekstrowerk. Saya menulis
Makefile asli untuk sistem operasi Haiku dan mengoreksi penulisan dan menyimpan berbagai data pengguna.
Game Port of the Cave Story yang berbasis pada mesin NXEngine, diluncurkan dalam sistem operasi Haiku.Karena permainan diasumsikan versi Rusia dan Inggris dengan serangkaian file yang dapat dieksekusi dan file data, saya memutuskan untuk membuat paket umum yang menggabungkan dua versi sekaligus dan secara otomatis memilih yang tepat berdasarkan bahasa sistem yang dipilih oleh pengguna. Ini diterapkan oleh skrip Shell paling sederhana:
Skrip ini diluncurkan saat item permainan dipilih di menu "Aplikasi" dan menentukan lokasi sistem saat ini. Jika pengguna memilih bahasa Rusia sebagai bahasa sistem, versi game Rusia akan mulai, dan dalam semua kasus lain, versi bahasa Inggris.
Tetapi dengan penciptaan ikon asli untuk aplikasi saya harus bermain-main cukup. Faktanya adalah bahwa dalam sistem operasi Haiku hanya ikon vektor format
HVIF khusus yang
diizinkan , yang ditetapkan sebagai atribut
sistem file
Sistem File Be . Dalam dokumentasi resmi, ada dua manual besar tentang cara membuat ikon Anda sendiri untuk aplikasi:
manual pertama menggambarkan gaya menggambar dan desain, dan
manual kedua menceritakan secara rinci cara menggunakan program sistem
Icon-O-Matic yang dirancang untuk membuat ikon.
Icon-O-Matic memungkinkan Anda untuk mengimpor file SVG yang paling sederhana dan mengekspor ikon yang dihasilkan ke dalam format yang diperlukan untuk HaikuPorter, yang disebut HVIF RDef dan mewakili HVIF yang sama, tetapi dikonversi ke tampilan teks. File RDef tidak hanya berisi gambar, tetapi juga informasi tambahan, misalnya versi aplikasi dan deskripsinya. Dalam beberapa hal, file-file ini menyerupai file RES yang digunakan di Windows. Perintah-perintah berikut dalam resep mengkompilasi file RDef dan mengatur hasilnya ke atribut khusus:
rc nxengine-launcher.rdef resattr -o "$appsDir/NXEngine/Cave Story" nxengine-launcher.rsrc addResourcesToBinaries $sourceDir/build/nxengine-rus.rdef "$appsDir/NXEngine/RUS/Cave Story"
Selain itu, fungsi
addResourcesToBinaries didefinisikan dalam resep, yang memungkinkan otomatisasi pekerjaan ini. Ada satu, tetapi masalah yang sangat serius dengan Icon-O-Matic: file-file SVG yang disimpan oleh editor vektor
Inkscape populer tidak terbuka atau diimpor tanpa mendukung beberapa fitur yang diperlukan, misalnya, gradien. Oleh karena itu, sebuah petualangan dengan mengubah gambar raster menjadi gambar vektor melalui penggunaan berbagai konverter online dan offline berbayar dan gratis, dan kemudian membuka file SVG yang dihasilkan di Icon-O-Matic, saya gagal total. Kemudian, saya memecahkan masalah membuka file SVG dan menemukan solusinya, tetapi saya akan menulis tentang ini di bawah ini. Sementara itu, saya memutuskan untuk mengambil keuntungan dari fitur standar Icon-O-Matic dan menggambar ikon sendiri. Setelah setengah jam menyalin hard pixel, saya mendapatkan seni berikut:
Program Ikon-O-Matic standar dalam sistem operasi Haiku.Ya, saya menggunakan editor vektor untuk membuat gambar dalam genre Pixel Art. Dalam pandangan amatiran saya tentang seorang pria yang kurang berpengalaman dalam seni, ternyata cukup baik. Saya menyimpan ikon ini dalam format yang diperlukan, menyiapkan semua perubahan, memperbarui resep dan mengirim semuanya ke repositori HaikuPorts.
Kode sumber proyek: https://github.com/EXL/NXEngineSaya mengirim paket yang dihasilkan untuk berjaga-jaga dan ke situs penggemar game
Cave Story (Doukutsu Monogatari) , administrasi yang menambahkan sistem operasi Haiku ke bagian unduhan.
<< Lompat ke konten4. Porting the Gish game
Proyek berikutnya yang saya putuskan untuk transfer ke Haiku adalah game
Gish , yang sebelumnya saya porting ke Android. Repositori HaikuPorts memiliki resep untuk implementasi gratis yang belum selesai dari permainan yang disebut
Freegish , jadi saya memutuskan untuk menambahkan game asli di sana juga, tetapi tanpa file data, karena mereka, tidak seperti mesin, dikirim secara terpisah dan sama sekali tidak gratis.
Port game Gish berjalan pada sistem operasi Haiku.Saya tidak punya masalah khusus dengan porting game ini. File yang dapat dieksekusi dikompilasi segera setelah perintah build berikut dijalankan:
cmake gish/src/main/cpp/ \ -DGLES=0 \ -DANDROID=0 \ -DSDL2_INCLUDE_DIR=`finddir B_SYSTEM_HEADERS_DIRECTORY` \ -DCMAKE_C_FLAGS="`sdl2-config --cflags` -D__linux__" \ -DCMAKE_BUILD_TYPE=Release cmake --build .
Selanjutnya, saya menerapkan kemampuan untuk meluncurkan game dari menu "Aplikasi" dan memberikan dukungan untuk menyimpan data pengguna ke direktori yang dapat diakses untuk direkam dan dimaksudkan untuk ini:
char* getHaikuSettingsPath() { char path[PATH_MAX]; find_directory(B_USER_SETTINGS_DIRECTORY, -1, false, path, sizeof(path)); strcat(path, "/Gish/"); return strdup(path); }
Fungsi
getHaikuSettingsPath () menggunakan fungsi
find_directory () dari Haiku API membentuk path lengkap ke direktori yang saya butuhkan.
Kode sumber proyek: https://github.com/EXL/GishTetap untuk memecahkan pertanyaan berikut: bagaimana seharusnya pengguna memilih direktori dengan file asli dari game Gish? Anda bisa mencoba menyelesaikan masalah menggunakan skrip Shell dan utilitas sistem
peringatan , tetapi saya memutuskan untuk mendekati masalah ini secara lebih menyeluruh dan mengimplementasikan peluncur GUI yang nyaman menggunakan API Haiku dan kerangka
Interface Kit .
<< Lompat ke konten5. Proyek BeGameLauncher, yang memungkinkan Anda membuat peluncur untuk game dengan cepat
Diputuskan untuk menulis proyek BeGameLauncher saya di C ++ dari standar lama tahun 1998, menggunakan alat asli sistem operasi untuk membuat aplikasi dengan antarmuka pengguna grafis. Karena nama-nama banyak program untuk Haiku dan BeOS dimulai dengan awalan โBeโ, saya juga memutuskan untuk memilih nama seperti itu untuk proyek tersebut. Saya memutuskan untuk memulai dengan membiasakan diri dengan kerangka Interface Kit, yang merupakan bagian dari API Haiku. Selain dokumentasi yang cukup terperinci di situs web resmi Haiku, saya menemukan dua
kursus pelajaran
DarkWyrm yang sangat
bagus yang memungkinkan pengembang pemula dengan cepat memahami cara kerja kelas sistem tertentu. Kursus pertama disebut
Learning to Program with Haiku dan pada awalnya mencakup dasar-dasar bahasa pemrograman C ++, yang akan sangat berguna bagi pemula. Kursus kedua disebut
Programming With Haiku dan ditujukan bagi mereka yang sudah terbiasa dengan C ++ dan memiliki pengetahuan dasar tentang bahasa ini. Kedua kursus berbicara tentang aspek paling beragam dari Haiku API dan karenanya akan sangat berguna bagi siapa saja yang ingin mulai membuat aplikasi untuk sistem operasi ini.
Setelah membaca materi yang luar biasa ini secara diagonal, saya membuat kesan umum tentang Haiku API dan mulai memikirkan langkah selanjutnya. Saya sudah memiliki pengalaman mengembangkan aplikasi aplikasi menggunakan kerangka kerja Qt, yang juga ditulis dalam bahasa pemrograman C ++ dan menggunakan paradigma pemrograman berorientasi objek. Jadi, API Haiku sangat mirip dengan itu, kecuali karena kurangnya sistem sinyal dan slot, jadi saya akan sering menggambar beberapa persamaan dan perbandingan dengan Qt. Selain itu, perlu diperhatikan penggunaan prinsip
pemrograman yang digerakkan oleh
Peristiwa , yang umum di API Haiku, yang memungkinkan berbagai entitas untuk berinteraksi satu sama lain melalui transmisi acara atau pesan. Sebuah analog dari kelas
QEvent di sini adalah kelas
BMessage , di mana sistem interaksi objek dibangun. Sebuah instance dari kelas
BMessage umumnya mendapatkan nomor unik yang memungkinkan Anda mengidentifikasi pengirim dan aksinya dalam filter peristiwa umum.
Untuk proyek saya, saya harus memilih kelas API Haiku yang sesuai yang memungkinkan saya untuk mengimplementasikan fungsionalitas yang dimaksud. Pertama, untuk meluncurkan aplikasi eksternal, perlu untuk menemukan analog dari kelas
QProcess atau fungsi
execix () POSIX, yang, omong-omong, juga berfungsi dengan baik di sistem operasi Haiku, namun, saya memutuskan bahwa menggunakan alat asli akan lebih disukai, tetapi untuk berjaga-jaga case meninggalkan kemungkinan meluncurkan aplikasi melalui fungsi POSIX. Kelas komunikasi antarproses
BRoster sangat bagus untuk tujuan ini. Itu menemukan metode
Launch () yang cocok yang memungkinkan Anda untuk menentukan path ke file yang dapat dieksekusi dan meneruskan argumen ke sana. Karena peluncur harus dapat menyimpan beberapa parameter, misalnya, direktori yang dipilih pengguna dengan file data game, saya memerlukan kelas yang melakukan semua ini. Di Qt, kelas seperti itu disebut
QSettings , dan di Haiku API, seperti yang diminta Gerasim, ada kelas
BMessage yang sudah saya
ketahui , yang memiliki fitur yang sangat berguna. Masalahnya adalah bahwa informasi dari kelas ini dapat dengan mudah diserialisasi dan, misalnya, disimpan ke disk. Ini sangat nyaman dan sering digunakan untuk merekam data pengguna dalam program, itulah sebabnya saya memilih kelas ini untuk menyimpan pengaturan dalam proyek saya untuk mengimplementasikan peluncur.
Sayangnya, API Haiku tidak menemukan analog dari kelas QDebug , jadi saya hanya mengirim output debug kepada saya selama proses pengembangan ke stderr menggunakan fungsi fprintf () dari bahasa pemrograman C standar:
Saya membungkus fungsi ini dalam entitas BeDebug () yang nyaman bagi saya , yang, tergantung pada standar bahasa yang dipilih, adalah makro atau juga fungsi. Ini dilakukan karena fakta bahwa C ++ 98 tidak mendukung makro dengan sejumlah variabel argumen.Kerangka kerja Qt juga memiliki kelas QMessageBox yang berguna di mana Anda dapat membuat dialog modal dengan informasi apa pun yang harus diperhatikan oleh pengguna, misalnya, kesalahan atau peringatan. API Haiku memiliki kelas BAlert untuk tujuan ini .yang implementasinya agak berbeda dari apa yang tersedia di Qt. Misalnya, objek kelas ini harus dibuat di heap, dan bukan di stack, karena setelah beberapa tindakan pengguna, itu harus menghapus sendiri. Adapun kelas-kelas lain dari antarmuka grafis, di sini saya sama sekali tidak mengalami kesulitan dan saya menemukan semua yang saya butuhkan tanpa masalah.Sekarang saya harus memikirkan arsitektur sederhana dari proyek ini. Saya memutuskan untuk fokus pada membuat perpustakaan statis, di mana akan ada dua kelas yang dirancang untuk mewarisi kelas turunan mereka sendiri dari mereka. Kelas pertama dan paling penting, BeLauncherBase, bertanggung jawab untuk membuat jendela peluncur utama, mentransfer semua parameter pengguna dan menyediakan kemampuan untuk menambahkan elemen GUI Anda sendiri. Kelas kedua, BeAboutWindow , hanya bertanggung jawab untuk membuka dialog "About the program ..." dengan informasi yang ditampilkan di jendela terpisah. Jadi, seorang programmer perlu melakukan dua langkah sederhana untuk membuat peluncurnya, misalnya, untuk memainkan Gish: class GishAboutWindow : public BeAboutWindow { ... }; class GishLauncher : public BeLauncherBase { ... }; int main(void) { BeApp *beApp = new BeApp(SIGNATURE); GishLauncher *gishLauncher = new GishLauncher(BeUtils::GetPathToHomeDir()); beApp->SetMainWindow(gishLauncher); beApp->Run(); delete beApp; beApp = NULL; return 0; }
Pertama, buat main function mulai yang sesuai () , dan kedua, cukup mewarisi dari dua kelas di atas dan mengimplementasikan metode yang diperlukan di dalamnya. Setelah itu, kami mengkompilasi file C ++ yang dihasilkan dengan tautan ke perpustakaan statis saya dan peluncur kami untuk game Gish sudah siap.Dialog "Tentang program ..." di peluncur port game Gish.Selanjutnya, saya berpikir tentang cara mentransfer parameter dari peluncur saya ke mesin itu sendiri atau ke file permainan yang dapat dieksekusi. Saya hanya melihat dua cara untuk menyelesaikan masalah ini. Cara pertama adalah mengubah variabel lingkungan. Dalam praktiknya, setelah mengklik tombol "Run", peluncur hanya menempatkan semua parameter ke dalam variabel lingkungan dengan memanggil fungsi setenv () , dan mesin game kemudian membaca parameter ini menggunakan fungsi getenv () , yang terlihat cukup sederhana. Satu-satunya masalah yang bisa muncul di sini adalah di kelas BRoster dan metode Launch () -nya: Saya tidak tahu apakah aplikasi yang diluncurkan dengan bantuan kelas ini akan mewarisi semua variabel lingkungan yang ditetapkan di peluncur. Setelah sedikit percobaan, pewarisan variabel lingkungan dikonfirmasi, dan saya sepenuhnya menerapkan metode ini dalam proyek saya. Cara kedua untuk memecahkan masalah adalah dengan menetapkan parameter baris perintah khusus. Dalam praktiknya, peluncur cukup meletakkan semua pengaturan dalam argumen yang sesuai dan memanggil aplikasi yang dapat dieksekusi dengannya. Tetapi mesin permainan sudah harus memprosesnya secara mandiri, yang menciptakan beberapa kesulitan. Misalnya, jika game tidak mengasumsikan kemungkinan menentukan path ke file game melalui parameter baris perintah, maka perlu untuk memodifikasi parser argumen di mesin itu sendiri. Terlepas dari masalah ini,Saya menerapkan cara interaksi ini dan sebagai hasilnya saya mendapat kesempatan besar untuk menggabungkan semuanya. Ini memungkinkan saya untuk membuat string untuk menentukan argumen pengguna di beberapa peluncur.Ketika semuanya dirancang, saya memutuskan untuk memilih sistem perakitan untuk proyek saya. Hanya dua opsi yang dipertimbangkan: Makefile "on steroids" dan CMake . Dalam kasus pertama, pengembang sistem operasi Haiku menyiapkan paket mesin makefile yang nyaman di mana mereka mengumpulkan semua fitur yang diperlukan yang akan dihadapi pengembang dengan mulai menulis aplikasi pada API Haiku, misalnya, pembuatan terjemahan otomatis dan kompilasi sumber daya aplikasi. Tapi saya bukan salah satu dari mereka yang mencari cara mudah, jadi saya memilih CMake dan memindahkan beberapa pekerjaan dari paket mesin makefile ke sana. Sebagai hasilnya, Anda dapat melihat skrip perakitan yang dihasilkan dalam repositori proyek, tautan yang akan saya tinggalkan di bawah.Cuplikan layar peluncur port game Gish untuk Haiku.Saya ingin menulis beberapa kata tentang pelokalan aplikasi. Dalam kerangka kerja Qt, ada fungsi pembungkus tr () yang nyaman untuk ini , dua utilitas tambahan lrelease dan lupdate , yang terlibat dalam pembuatan file terjemahan. Termasuk dalam kerangka kerja ini bahkan program Ahli Bahasa Qt khusus dengan antarmuka pengguna grafis yang nyaman yang dirancang untuk penerjemah. Di Haiku API, alat pelokalan aplikasi kurang nyaman dan lebih kuno. Diusulkan untuk membungkus baris yang perlu diterjemahkan dalam B_TRANSLATE makro khusus () , dan menambahkan definisi B_TRANSLATION_CONTEXT ke file sumber, yang memisahkan satu grup string yang dapat diterjemahkan dari yang lain. Setelah itu, hal yang sangat aneh perlu dilakukan: atur preprocessor kompiler dengan flag -DB_COLLECTING_CATKEYS pada semua file sumber proyek, lakukan sihir dengan utilitas grep dan akhirnya dapatkan file PRE yang besar. Dengan file ini, utilitas collectcatkeys akan berfungsi , yang sudah membuat file penerjemah CATKEYS yang mudah dibaca dan diedit oleh manusia. Setelah melokalisasi string, Anda perlu menggunakan utilitas tautancatkeys, yang menambahkan terjemahan ke sumber daya dari file yang dapat dieksekusi. Jadi, ketika memilih bahasa sistem tertentu, aplikasi menampilkan baris yang diterjemahkan. Aneh, dokumentasi Haiku API tentang pelokalan aplikasi mengandung sangat sedikit informasi. Namun, di situs resmi saya menemukan artikel yang sangat bagus Melokalkan aplikasi , yang merinci banyak aspek terjemahan aplikasi untuk sistem operasi ini. Seperti yang saya pahami, BeOS asli tidak memiliki kerangka kerja Kit Lokal dan ditambahkan hanya ke Haiku.Langkah saya berikutnya adalah memilih lingkungan untuk mengembangkan aplikasi dalam bahasa pemrograman C ++. Karena kenyataan bahwa kerangka kerja Qt diangkut ke Haiku, IDE seperti Qt Creator dan tersedia di repositori HaikuPortsKDevelop . Selain itu, ada port JVM , yang memungkinkan Anda untuk menggunakan IDE yang ditulis dalam bahasa pemrograman Java, misalnya, NetBeans atau IntelliJ IDEA . Saya memilih lingkungan pengembangan Qt Creator, terutama karena dalam versi terbarunya ada analisis kode berkualitas tinggi menggunakan parser LibClang , yang bekerja jauh lebih akurat dan lebih cepat daripada parser standar.Lingkungan pengembangan terintegrasi Qt Creator berjalan pada sistem operasi Haiku.Dalam hal IDE lintas platform yang terkenal di Haiku, semuanya baik-baik saja. Tetapi bagaimana dengan solusi eksklusif? Saya tidak bisa tidak menyebutkan proyek yang sangat menarik, disponsori oleh DarkWyrm dan yang saat ini mendukung Adam Fowler , disebut Paladin . Program ini membuat editor teks Pe tersedia dalam distribusi sistem operasi hampir menjadi IDE nyata.Paladin IDE untuk Haiku diinstal dari repositori HaikuPorts.Menggunakan ubin yang terintegrasi dalam sistem jendela Haiku, Anda dapat melampirkan jendela Paladin di sisi editor Pe dan menambahkan terminal. Juga di repositori HaikuPorts ada editor teks Koder yang nyaman yang menyerupai program Notepad ++ populer untuk Windows dan juga didasarkan pada pengalaman proyek Scintilla . Untuk aplikasi saya, saya membuat file PLD proyek dan sekarang setiap pengembang yang menggunakan Paladin IDE dapat dengan mudah membuka proyek saya di program ini.Ketika lingkungan pengembangan Qt Creator diatur dan siap digunakan, saya mulai menyadari semua fitur yang direncanakan. Masalah pertama yang saya temui terkait dengan kontrol penskalaan saat mengubah ukuran font sistem. Awalnya, di BeOS, semua kode penempatan elemen GUI diatur secara eksplisit dalam koordinat. Itu sangat merepotkan, bertele-tele, dan menciptakan banyak masalah, misalnya, dengan ukuran font yang sama mengubah seluruh bentuk aplikasi tersebar dan menjadi tidak dapat digunakan. Untungnya, Haiku mencoba menyelesaikan masalah ini dan menambahkan Layout API , yang merupakan bagian dari kerangka Interface Kit.Melalui penggunaan Layout API, peluncur merespons dengan benar untuk mengubah ukuran font sistem di Haiku.Inovasi ini sepenuhnya menyelesaikan masalah saya dengan kontrol posisi dan saya menulis ulang aplikasi menggunakan Layout API, yang secara serius mengurangi panjang kode di beberapa tempat. Di situs web resmi Haiku, saya menemukan serangkaian artikel menarik Laying It All Out , yang hanya menjelaskan alasan mengapa antarmuka perangkat lunak ini dibuat dan menunjukkan contoh penggunaannya.Masalah lain teridentifikasi oleh Gerasim ketika dia mencoba menggunakan perpustakaan saya untuk membuat peluncur untuk game yang dia porting. Masalahnya adalah saya sering beralih ke kode sumber sistem operasi Haiku sendiri untuk mengimplementasikan berbagai fungsi. Secara khusus, saya menemukan contoh menggunakan metode Launch () pada objek kelas BRoster di sana. Masalahnya memanifestasikan dirinya dalam kenyataan bahwa contoh ini tidak benar dan mesin permainan porting oleh Gerasim tidak dapat dengan benar menguraikan argumen yang ditetapkan oleh peluncur. Setelah mempelajari kode sumber Haiku lebih dalam, saya berhasil menemukan bahwa argumen pertama, yang seharusnya berisi path lengkap ke file yang dapat dieksekusi, tidak perlu diatur secara eksplisit dalam kasus metode Launch () , karena akan diatur secara otomatis.
Dokumentasi untuk metode Launch () tidak mengatakan bahwa argumen pertama tidak diperlukan, yang mungkin mengapa pengembang salah menulis kode ini. Saya memperbaiki kesalahan ini dalam proyek saya dan masalah Gerasim diselesaikan dengan sendirinya. Tetapi bagaimana dengan kesalahan kecil dalam sistem operasi Haiku itu sendiri? Saya memutuskan untuk memperbaikinya juga. Untungnya, ternyata sangat mudah dilakukan! Anda harus masuk menggunakan GitHub ke sumber daya Gerrit Review Haiku Code , tambahkan kunci SSH publik Anda, bercabang-cabang kode sumber Haiku, buat komit komit dan kirim tambalan yang dihasilkan ke ulasan Kode ke pengembang istimewa: git clone ssh://EXL@git.haiku-os.org/haiku --depth=1 -b master && cd haiku git commit git push origin master:refs/for/master
Jika Anda perlu memperbarui tambalan yang sudah dikirim, maka sebelum mengirim yang diubah atau komit baru, pastikan untuk menambahkan ID yang diberikan layanan Tinjauan Kode Haiku pada akhir pesan komit. Setelah tambalan dikirim, pengembang Haiku harus menyetujui, menolak, atau mengirimkannya untuk direvisi. Dalam kasus saya, koreksi diterima segera dan cacat kecil ini sekarang diperbaiki di mana-mana. Jika Anda perlu menguji tambalan Anda sebelum mengirimnya ke repositori, Anda dapat mencoba mengkompilasi aplikasi terpisah menggunakan utilitas jam , yang merupakan garpu dari sistem build Perforce Jam dan digunakan untuk membangun seluruh basis kode dari sistem operasi Haiku. Repositori kode sumber memiliki file ReadMe.Compiling.md, yang akan membantu Anda menangani semua trik kompilasi.Saat menyelesaikan proyek saya, saya menemukan alasan mengapa program Icon-O-Matic tidak membuka file SVG yang dibuat menggunakan editor vektor Inkscape. Masalahnya adalah Icon-O-Matic tidak dapat memproses atribut viewBox , namun, jika Anda menemukan file SVG sederhana tanpa atribut ini, edit dengan Inkscape dan simpan sebagai file SVG biasa , itu akan terbuka di Icon-O -Matic. Oleh karena itu, saya memasukkan repositori saya ke file SVG yang disiapkan khusus yang dapat diedit dan yang akan terbuka di Icon-O-Matic tanpa masalah. Selain itu, saya menambahkan instruksi kecil ke file proyek ReadMe tentang cara membuat ikon untuk peluncur saya menggunakan Inkscape.Saya memutuskan untuk memeriksa kode proyek saya dengan berbagai analisis statis, tetapi mereka tidak menemukan masalah serius. Tetapi saya kemudian menemukan satu masalah yang tidak dapat mereka deteksi. Fakta bahwa metode statis GetBitmap () kelas BTranslationUtils bisa kembali NULL:
Dan dalam metode Draw () , saya secara tidak sengaja lupa untuk memeriksa bidang kelas fBitmap untuk validitas. Oleh karena itu, aplikasi tersebut diharapkan macet jika tidak menemukan gambar tertentu, tetapi menurut rencana itu adalah menggambar kotak merah sebagai gantinya. Saya menceritakan kisah ini kepada fakta bahwa analisa statis jauh dari obat mujarab dan perhatian ketika bekerja dengan kode dalam bahasa pemrograman C ++ diperlukan dalam hal apapun.Kode sumber proyek BeGameLauncher dan semua praktik terbaik saya diunggah ke repositori di GitHub. Saya harap program ini akan bermanfaat bagi seseorang dan mungkin semacam tutorial sebagai aplikasi sederhana untuk Haiku:Kode sumber proyek: https://github.com/EXL/BeGameLauncherSedikit saran bagi mereka yang akan menggunakan peluncur saya dalam resep mereka untuk repositori HaikuPorts. Jika Anda ingin menyembunyikan permainan yang dapat dieksekusi dari daftar aplikasi Haiku yang dibaca beberapa program, dan hanya meninggalkan peluncur di sana, Anda dapat menggunakan trik berikut: settype -t application/x-vnd.Be-elfexecutable $appsDir/Gish/engine/Gish rc $portDir/additional-files/gish.rdef -o gish.rsrc resattr -o $appsDir/Gish/engine/Gish gish.rsrc
Ini akan mengecualikan kemampuan untuk menjalankan file yang dapat dieksekusi tanpa parameter dilewatkan oleh peluncur dari berbagai program seperti QuickLaunch , yang terlibat dalam peluncuran cepat aplikasi. Dalam hal ini, ikon asli Anda pada file yang dapat dieksekusi akan disimpan.<< Lompat ke konten6. Porting Xash3D: Game Half-Life Legendaris dan Pengaya Resmi
Proyek Xash3D adalah implementasi gratis dari mesin GoldSrc, yang digunakan di game Half-Life dan dalam add-on resminya. Di belakang pengembangan Xash3D adalah programmer domestik Paman Misha , yang masih mengkoordinasikan pengembangan dan peningkatannya. Beberapa saat kemudian, pengembang lain bergabung dengan proyek yang membuat garpu FWGS Xash3D , dengan dukungan untuk sejumlah besar sistem operasi non-Windows. Hari ini, programmer utama dari proyek FWGS Xash3D adalah mittorn dan a1batross ( libpony ), orang terakhir adalah peserta aktif dalam forum MotoFan.Ru yang dulu populer , .
: Haiku, Xash3D , Haiku Half-Life, ? โ .
, , Xash3D, Haiku. -,
-D__linux__dan mencoba membangun sebuah executable dan banyak perpustakaan. Anehnya, segalanya berjalan sangat cepat dan pada malam hari, setelah melempar file data untuk permainan, saya berhasil meluncurkan Half-Life dan naik kereta ke stasiun utama di Black Mesa.Proses porting mesin Xash3D ke Haiku di Qt Creator IDE.Karena kenyataan bahwa proyek tersebut menggunakan pustaka SDL2 lintas-platform, porting engine sangat disederhanakan, karena Anda tidak perlu menulis potongan kode apa pun yang bergantung pada platform, misalnya: mengeluarkan suara, membuat jendela dengan konteks OpenGL, atau menangani input event. Semua ini telah diterapkan di perpustakaan SDL2 dan siap digunakan. Masalah kecil muncul dengan dukungan jaringan, karena Haiku memiliki perpustakaan terpisah yang mengimplementasikan tumpukan jaringan, sehingga perlu dikaitkan dengan mesin.Proyek untuk membuat peluncur, yang saya tulis sedikit lebih tinggi, sangat berguna bagi saya. Menggunakan warisan dari kelas C ++, saya serius memperluas fungsinya dan menerapkan kemampuan untuk memilih berbagai tambahan pada permainan:Cuplikan layar peluncur port mesin Xash3D untuk Haiku.Idenya adalah ini: mendefinisikan tiga variabel lingkungan yang akan memungkinkan Anda untuk secara fleksibel mengkonfigurasi mesin permainan untuk meluncurkan add-on tertentu. Dalam hal ini, akan berguna untuk membiarkan pengguna bermain dengan berbagai argumen dari file yang dapat dieksekusi dan meninggalkan kemungkinan peluncuran mesin secara portabel ketika itu hanya dalam direktori dengan file data yang diperlukan. Jadi, variabel lingkungan pertama XASH3D_BASEDIR bertanggung jawab untuk direktori dengan file game yang dipilih pengguna dari peluncur. Variabel kedua XASH3D_GAME bertanggung jawab atas tambahan apa yang dipilih pengguna untuk diluncurkan di peluncur. Dan di sini adalah variabel ketiga XASH3D_MIRRORDIR, hanya berguna untuk pengguna tingkat lanjut. Ini memungkinkan Anda untuk merefleksikan direktori sistem Xash3D ke ruang disk yang dapat ditulis untuk pengguna. Jadi, seseorang yang ingin merilis game add-on-nya di mesin Xash3D di bawah Haiku hanya perlu mengumpulkan beberapa perpustakaan dinamis untuk arsitektur yang berbeda dari kode sumber proyeknya:โข ./cl_dlls/libclient-haiku.soโข ./dlls/libserver-haiku .soโข ./cl_dlls/libclient-haiku64.soโข ./dlls/libserver-haiku64.soLalu taruh di direktori yang sesuai dengan add-on Anda. Untuk port Xash3D saya, saya memutuskan untuk mengkompilasi pustaka add-on populer untuk game Half-Life, yaitu Blue Shift dan Opposing Force, yang memungkinkan pengguna mengunduh file data mereka, memilih direktori dan memulai permainan tanpa kompilasi pustaka.Dalam proses porting mesin Xash3D, saya mengalami beberapa masalah lucu. Ternyata untuk menentukan panjang pesan bantuan untuk argumen file yang dapat dieksekusi yang dihasilkan ketika parameter --help dilewatkan , mesin menggunakan ukuran yang telah ditentukan dari konstanta MAX_SYSPATH , yang merupakan alias dari konstanta MAX_PATH lain , nilai yang sudah diambil dari API Haiku. Jadi, untuk waktu yang lama saya tidak bisa mengerti mengapa sertifikat ini dikeluarkan tidak lengkap dan terputus di tempat yang paling menarik. Awalnya saya berdosa dengan cara yang aneh dengan aliran output kesalahan standarstderr terhubung buffering dan bahkan mencoba untuk menonaktifkannya secara paksa. Setelah beberapa waktu, saya ingat bahwa saya terkejut dengan ukuran yang sangat kecil dari konstanta MAX_PATH di sistem operasi Haiku. Konstanta ini mengasumsikan ukuran jalur hanya 1024 byte. Dugaan saya benar-benar terbayar, segera setelah saya meningkatkan ukuran pesan ke standar 4096 byte, masalahnya teratasi. Kesimpulan berikut harus diambil dari cerita lucu ini: Anda tidak boleh menggunakan konstanta MAX_PATH dalam array karakter yang sama sekali tidak terkait dengan jalur file.Half-Life, Blue Shift Opposing Force, Xash3D Haiku (, ).. ,
XASH_INTERNAL_GAMELIBS , . .
a1batross , ,
OpenVGUI . Xash3D Haiku ,
XASH_INTERNAL_GAMELIBS dan melaporkan bug ini kepada pengembang mesin.Lalu saya menemukan ketidakmungkinan membuka browser WebPositive yang dibangun di Haiku ketika mengklik tautan di dalam game yang berjalan di Xash3D. Masalahnya benar-benar aneh, karena ketika mesin mulai dari terminal, browser terbuka, tetapi ketika mulai menggunakan peluncur, dia menolak untuk melakukannya. Setelah mempelajari kode sedikit, saya menemukan panggilan execve () di sana , yang saya coba ganti dengan system () , setelah itu browser mulai terbuka tanpa masalah.Ketika kesalahan terjadi, mesin Xash3D secara aktif menggunakan panggilan fungsi SDL_ShowSimpleMessageBox () dan SDL_ShowMessageBox (), hanya port saat ini dari perpustakaan SDL2 untuk Haiku tidak mendukung pembuatan dialog ini. Versi perpustakaan kami tidak memiliki fungsi ini. Tetapi saya akan berbicara tentang memperbaiki masalah ini di bawah ini.Port mesin Xash3D dipublikasikan ke repositori Haiku.Perlu juga dicatat bahwa sebelum saya mentransfer mesin Xash3D ke Haiku, Gerasim Troeglazov menerapkan penangkapan kursor mouse di SDL2; Sebelum itu, bermain game 3D hampir tidak mungkin. Beberapa saat kemudian, ia memperbaiki bug yang rumit, di mana gerakan pemain di ruang angkasa secara bertahap melambat, dan permainan mulai sangat lambat. Ternyata faktanya adalah bahwa secara default peristiwa kursor mouse ditransmisikan dengan semua sejarah pergerakannya di sekitar layar. Dengan demikian, cerita ini dengan cepat meningkat selama pertandingan dan semuanya mulai melambat sangat. Menonaktifkan fitur ini di port Haiku SDL2 memecahkan masalah ini dan sekarang Anda dapat bermain Half-Life tanpa masalah. Meskipun, kurangnya akselerasi 3D pada perangkat keras yang lemah membuat dirinya terasa. Dan jika gim ini bekerja dengan baik di jendela dan tidak melambat sama sekali, maka dalam mode layar penuh FPS berkurang secara signifikan.Tapi di sini hanya akan membantu menambah akselerasi perangkat keras ke driver video untuk setidaknya GPU yang dibangun ke dalam prosesor Intel yang populer.: https://github.com/FWGS/xash3dFWGS Xash3D, , HaikuPorts HaikuDepot Haiku.
<<7. Serious Sam: The First Encounter The Second Encounter
Croteam Serious Engine , Serious Sam:
The First Encounter The Second Encounter . Haiku, .
Cuplikan layar peluncur port Serious Engine untuk Haiku.Perakitan file yang dapat dieksekusi setelah perubahan dilakukan tanpa masalah, tetapi itu tidak mudah untuk memulai permainan karena fakta bahwa kesalahan dituangkan ke dalam dialog SDL2, implementasi yang tidak tersedia dalam versi perpustakaan ini untuk Haiku. Oleh karena itu, saya harus mengambil stderr , aliran output kesalahan standar yang teruji waktu, dan perlahan menyelesaikan masalah, yang ternyata terutama karena tidak adanya file data permainan yang diperlukan.Cuplikan layar Serious Sam: Game Encounter Kedua diluncurkan menggunakan port Serious Engine untuk sistem operasi Haiku.Setelah mendekomposisi file yang diunduh ke direktori yang diperlukan, saya dapat menjalankan bagian kedua dari permainan yang luar biasa ini tanpa masalah dan bahkan berlari sedikit melewati hutan yang indah. Meskipun kurangnya akselerasi 3D, prosesor menarik daya tarik grafis dari game jika Anda menjalankannya di jendela, dan tidak dalam mode layar penuh. Mesin ini bekerja, tentu saja, dengan FPS jauh lebih rendah daripada mesin Xash3D, tentang yang saya tulis di atas, tetapi grafik di sini lebih modern dan lebih baik. Setelah manipulasi kecil, adalah mungkin untuk meluncurkan bagian pertama dari gim, yang membutuhkan file yang dapat dieksekusi berbeda dan satu set perpustakaan dinamis yang berbeda. Anehnya, dia mendapat sedikit lebih cepat, rupanya grafis di dalamnya tidak begitu menuntut. Mendaki pengaturan mesin, saya menemukan sejumlah besar parameter grafis yang dapat secara signifikan mengurangi beban pada prosesor,yang dalam kasus Haiku ternyata sangat berguna.
Cuplikan layar Serious Sam: Game Encounter Pertama diluncurkan menggunakan port Serious Engine untuk sistem operasi Haiku.Saya memutuskan untuk membuat satu paket untuk dua bagian permainan sekaligus, beralih di antara mereka akan dilakukan hanya dengan memilih direktori dengan set file data yang sesuai. Misalnya, jika pengguna di peluncur memilih direktori dengan file-file permainan Serious Sam: The First Encounter, maka file yang dapat dieksekusi yang sesuai diluncurkan dan kumpulan perpustakaan dinamis yang sesuai dimuat. Dan jika ia memilih direktori dengan file-file permainan Serious Sam: The Second Encounter, maka peluncur akan meluncurkan file yang dapat dieksekusi lainnya yang akan memuat kumpulan pustaka bersama miliknya.Sayangnya, itu bukan tanpa masalah. Perubahan berulang dalam resolusi mode video dalam permainan menyebabkan jatuhnya seluruh mesin. Dalam hal ini, dalam distribusi Linux saya, crash ini bukan. Saya menghabiskan banyak waktu melokalisasi masalah dan memperbaikinya. Ternyata intinya adalah bahwa dengan setiap perubahan dalam resolusi, jendela SDL_Window dihancurkan dan dibuat lagiPada saat yang sama, penyaji OpenGL tidak dapat beralih waktu dan mencoba menggambar sesuatu di sana di jendela yang rusak. Trik seperti itu port perpustakaan SDL2 di Haiku tidak memungkinkan untuk engkol. Semua upaya sederhana untuk menyelesaikan masalah ini tidak membantu, dan saya harus serius masuk ke logika dan mengubah perilaku sehingga jendela tidak pecah ketika resolusi diubah, tetapi parameternya hanya berubah. Ini membantu menghilangkan kerusakan, tetapi menambahkan batasan tambahan: sekarang, untuk mengaktifkan mode layar penuh, Anda perlu menghidupkan ulang mesin.Masalah lain adalah kurangnya musik dalam game. Namun, di Linux, sekali lagi, masalah ini tidak terjadi. Meneliti kode sumber mesin, saya menemukan bahwa memainkan musik tergantung pada perpustakaan libvorbisfile, tetapi mesin itu sendiri tidak terhubung dengan itu, tetapi menggunakan fungsi sistem dlopen () untuk memberi makan aliran file audio OGG ke perpustakaan ini. Masalahnya adalah bahwa mesin tidak dapat menemukan perpustakaan ini di Haiku, karena tidak ada symlink ke file perpustakaan tanpa versi. void CUnixDynamicLoader::DoOpen(const char *lib) {
, , . , . , API.
, , x86, x86_64 . x86
SERIOUS_MHZ , . , - . , , Haiku API , :
#include <kernel/OS.h> #include <stdio.h> ... uint64 cpuFreq = 0; uint32 count = 0; get_cpu_topology_info(NULL, &count); if (count != 0) { cpu_topology_node_info *topology = new cpu_topology_node_info[count]; get_cpu_topology_info(topology, &count); for (uint32 i = 0; i < count; ++i) { if(topology[i].type == B_TOPOLOGY_CORE) { cpuFreq = topology[i].data.core.default_frequency; } } delete[] topology; } fprintf(stderr, "%llu\n", cpuFreq);
Tetapi itu tidak membantu. Kemudian saya memeriksa log mesin pada x86_64 dan melihat bahwa ada frekuensi CPU umumnya ditentukan pada 1 MHz, tetapi semuanya bekerja dengan baik. Melanjutkan memeriksa kode lebih lanjut, saya menemukan penolakan definisi __GNU_INLINE_X86_32__ , yang secara otomatis terbuka ketika aplikasi dibangun untuk arsitektur x86, tetapi tidak untuk x86_64. Di bawah definisi ini, bendera yang digunakan untuk menggunakan pengatur waktu SDL2 disembunyikan, alih-alih mendapatkan frekuensi prosesor menggunakan berbagai keajaiban seperti inline assembler dan instruksi rdtsc atau membaca file / proc / cpuinfo , jadi saya membuat flag ini diaktifkan dan untuk x86, yang memecahkan masalah saya.Cacat terakhir terkait dengan kecerobohan saya. Saya ketinggalan dalam file perakitanCMakeLists.txt mengatur -march = flag asli , yang secara harfiah memberitahu kompiler: saat membuat blok kode mesin, gunakan semua instruksi canggih dan modern yang tersedia pada prosesor komputer Anda. if(NOT PANDORA AND NOT HAIKU) message("Warning: arch-native will be used!") add_compile_options(-march=native) endif() if(HAIKU) if(CMAKE_SIZEOF_VOID_P EQUAL 4)
- build- , . MMX, SSE SSE2 , inline- , , .
, Croteam - , :
: https://github.com/EXLMOTODEV/Serious-Engine, Serious Sam, HaikuPorts. .
<<8. (Vangers)
, , 90- KD Lab.
Telegram IM , Haiku,
GitHub- , .
Cuplikan layar peluncur port game Vanger untuk Haiku.Setelah menarik kode sumber ke Haiku, saya mencoba mengompilasinya dan saya berhasil tanpa masalah khusus. Saya harus bermain-main sedikit dengan kurangnya beberapa file header dan dengan jalur ke perpustakaan FFmpeg yang digunakan oleh mesin permainan ini. Saya segera mulai menyiapkan kode sumber untuk pengemasan, jadi saya menambahkan variabel lingkungan VANGERS_DATA dan memindahkan log engine ke direktori pengguna yang dapat ditulis.Proses porting game Vanger ke Haiku di Qt Creator IDE.Saya memulai permainan itu sendiri dan setelah beberapa saat saya menghargai seluruh atmosfer yang berhasil dibuat oleh orang-orang dari KD Lab. Setelah beberapa waktu, saya mulai dengan blak-blakan membawa Nimbus ke Inkubator dan Dahak ke Podish, setelah itu saya bahkan berhasil membawa Elik ke yang ketiga. Setelah bermain cukup banyak, saya mulai menyiapkan peluncur untuk game ini berdasarkan perpustakaan saya, tentang yang saya tulis di atas.Port game untuk Vanger yang berjalan pada sistem operasi Haiku.Masalah pertama yang saya temui adalah file data game, yang dapat diperoleh secara resmi menggunakan layanan distribusi digital GOG.com dan Steam , tidak ingin bekerja dengan mesin. Saya harus menghubungi seseorang yang menggunakan nama panggilan stalkerg dan yang porting Wanger ke Linux. Dia memberi tahu saya file mana yang harus diganti, sehingga semuanya dimulai dan mulai berfungsi. Saya mengikuti rekomendasinya dan mendapatkan apa yang saya butuhkan.Seperti dalam kasus port NXEngine (Cave Story), yang saya tulis di atas, versi Rusia dan Inggris berbeda dalam file yang dapat dieksekusi yang berbeda, tetapi direktori dengan file data adalah umum, perbedaannya hanya pada skrip. Di ujung stalkerg, saya mencoba mengkompilasi mesin game dengan opsi -DBINARY_SCRIPT = Off , yang mengaktifkan kompilasi dinamis dari skrip ini saat runtime, jika mereka ada di direktori file data game. Semua ini memungkinkan saya untuk membuat peluncur, di mana ada kemampuan untuk beralih bahasa. Idenya adalah ini: direktori game sudah diperiksa sebelumnya, dan jika tidak memiliki skrip yang diperlukan, maka mereka disalin dari isi paket, setelah itu file yang dapat dieksekusi dari versi Rusia atau Inggris sudah berjalan.Port game Vanger, diterbitkan dalam repositori Haiku.Saat porting Wanger, saya menggunakan satu fitur menarik terkait dengan pustaka bersama yang saya sukai tentang Haiku. Mesin gim tergantung pada libclunk.so perpustakaan dinamis , yang bertanggung jawab untuk menghasilkan suara binaural secara real time. Dan jika di Linux, saya harus mematahkan jari saya, mengganti path ke perpustakaan ini dalam variabel lingkungan LD_LIBRARY_PATH , sehingga bahkan apa yang ada dalam variabel ini sebelum itu juga disimpan, maka di Haiku itu dilakukan dengan mudah, seperti pada Windows. Cukup untuk meletakkan perpustakaan bersama di sebelah file yang dapat dieksekusi dan itu akan diambil, dengan satu-satunya perbedaan adalah bahwa dalam kasus Haiku, perpustakaan harus diletakkan di direktori ./lib/, yang menurut saya dapat sangat menghemat waktu dan saraf. Oleh karena itu, saya memutuskan untuk tidak mempertimbangkan kompilasi statis perpustakaan ini.Kode sumber proyek: https://github.com/KranX/VangersPengembang Wanger menerima perubahan saya pada mesin permainan mereka, dan paket yang siap dipasang tersedia untuk diunduh dari repositori HaikuPorts atau program HaikuDepot, meskipun ada beberapa baru-baru ini di infrastruktur repositori yang terjadi setelah Memperbarui distribusi Fedora Linux ke versi baru.<< Lompat ke konten9. Implementasi dialog di perpustakaan SDL2 untuk Haiku
Ketika mem-porting mesin Xash3D dan Serious Engine, yang saya tulis di atas, saya menemukan port lokal di perpustakaan SDL2 bahwa ada kurangnya implementasi dialog. Dialog dipanggil oleh dua fungsi SDL_ShowSimpleMessageBox () dan SDL_ShowMessageBox () , yang memungkinkan untuk memberi tahu pengguna tentang informasi penting apa pun, misalnya, tentang kesalahan. Pelaksanaan dialog ini tersedia di banyak platform dan sistem operasi: Windows, macOS, iOS, X11 dan Android, tetapi karena beberapa alasan hilang dari Haiku. Saya memutuskan untuk memperbaiki kelalaian ini dan menambahkan fungsi ini ke port perpustakaan SDL2.Di Haiku API, atau lebih tepatnya dalam kerangka Interface Kit, ada kelas BAlert yang luar biasa , . . , , , , ,
BAlert , . , : , ,
Go() . , , .
Implementasi dialog di perpustakaan SDL2 untuk sistem operasi Haiku.Kesulitan pertama yang saya temui adalah ketika menggunakan objek apa pun dari kelas BAlert atau turunannya, perlu untuk membuat instance dari kelas sistem BApplication , tampaknya untuk mendaftarkan aplikasi di app_server agar dapat berinteraksi dengannya. Saya membuat turunan dari kelas ini, tetapi ketika memanggil dialog BAlert dari proses lain atau dari jendela yang dibuat, saya mendapat kesalahan lain yang terkait dengan fakta bahwa aplikasi tidak dapat memiliki dua objek dari kelas BApplication , untungnya saya menemukan solusi untuk masalah ini. Haiku API memiliki pointer global ke instance kelas saat iniBApplication ,
be_app , Qt
qApp , . ,
be_app NULL, , , . .
, SDL2 C, Haiku API, , C++. -
extern "C" , . ,
new new(std::nothrow) , NULL, , SDL2, , .
. , SDL2 , Haiku API .
, yang saya jalankan secara berkala pada sistem operasi yang berbeda, menganalisis hasilnya dan mengevaluasi pekerjaan saya. Pada akhirnya, saya begitu terbawa sehingga saya bahkan membuat dukungan untuk kustomisasi, seperti pengaturan warna yang berbeda untuk tombol dan latar belakang dialog. Ini didukung di API perpustakaan SDL2, tetapi pada awalnya saya tidak berencana untuk mengimplementasikan hal-hal seperti itu.Jika programmer memutuskan untuk meludahkan garis yang sangat, sangat panjang ke dalam dialog ini, maka objek kelas BTextView , yang digunakan di dalam objek kelas BAlert , perlu memanggil metode SetWordWrap () dengan argumen true , , . , :
strlen() . , SDL2 UTF-8, ,
strlen() , . Haiku API
BString ,
CountChars() , , :
bool CheckLongLines(const char *aMessage) { int final = 0;
Fungsi ini memeriksa teks pesan untuk baris yang lebih panjang dari 120 karakter, dan jika ada, mengembalikan true. Adapun UTF-8, masih ada momen seperti itu di beberapa font sistem Haiku tidak ada dukungan untuk karakter Cina. Karena itu, misalnya, Anda tidak dapat mengatur prasasti bahasa Mandarin apa pun di judul jendela. Tetapi teks dalam bahasa Rusia dipasang tanpa masalah.Saat mempersiapkan paket, saya menemukan kesalahan build untuk arsitektur x86_gcc2, yang diaktifkan dalam resep perpustakaan SDL2. Ternyata kompiler GCC 2.95 tertua tidak dapat menebak bahwa kode yang dikomentari sama dengan yang di bawah ini: rgb_color ConvertColorType(const SDL_MessageBoxColor *aColor) const {
Oleh karena itu, saya harus menulis ulang fragmen ini dalam gaya lama dan masih menghapus inisialisasi beberapa konstanta di kelas secara langsung dalam deklarasi mereka, kompiler lama juga tidak suka ini.Saya mengirim tambalan untuk implementasi dialog SDL2 ke repositori HaikuPorts, jadi sekarang mesin Xash3D dan Serious Engine dapat dengan benar mengeluarkan informasi apa pun kepada pengguna, misalnya, tentang kesalahan. Tapi saya belum menghubungi pengembang SDL2, tapi alangkah baiknya untuk mentransfer semua patch dari repositori HaikuPorts ke perpustakaan SDL2 hulu. Meskipun pekerjaan porting tambalan kami telah menjadi sedikit lebih rumit karena penggantian nama awalan fungsi baru - baru ini dari BE_ * ke HAIKU_ * , ini bukan masalah serius.<< Lompat ke konten10. Porting fork saya dari Cool Reader
Saya telah mengembangkan fork program Cool Reader untuk waktu yang lama , yang ditulis oleh Vadim Lopatin ( Buggins ), artikel terkait tentang ini tersedia di situs web saya. Dalam komentar pada artikel itu, pembaca blog saya terus-menerus berhenti berlangganan yang ingin melihat beberapa fitur baru dalam aplikasi favorit mereka untuk membaca buku elektronik, atau ingin memperbaiki kesalahan dan kekurangan dalam fungsi-fungsi program yang sudah diterapkan.Garpu Pembaca Keren saya berjalan di Haiku.Dalam repositori HaikuPorts, saya menemukan resep untuk membangun program Cool Reader asli, namun, karena beberapa perubahan terus-menerus terjadi dengan sumber daya SourceForge , resep ini ternyata tidak beroperasi, karena kode sumber aplikasi menjadi tidak tersedia untuk diunduh. Kemudian saya memutuskan untuk mentransfer garpu saya ke repositori HaikuPorts, sebagai versi baru dari Cool Reader. Saya menempatkan semua tambalan Gerasim pada kode, memperbaiki beberapa kekurangan dalam resep, dan berdasarkan itu saya membuat paket baru yang sudah tersedia untuk semua pengguna Haiku. Anda dapat menemukan kode sumber untuk garpu Pembaca Keren saya di repositori GitHub ini:Kode sumber proyek: https://github.com/EXLMOTODEV/coolreaderSatu-satunya masalah yang saya temui adalah ketidakakuratan dalam mentransfer tambalan Gerasim. Selain definisi __HAIKU__ , di tempat lain dalam sistem build, definisi _LINUX juga ditetapkan dan, karena dalam kebanyakan kasus yang terakhir dalam daftar kode sumber adalah yang pertama, kompilasi bersyarat membuat saya kecewa. Sesuai dengan aturan prioritas preprocessor, untuk Haiku tepatnya potongan kode tersebut dikompilasi yang dibingkai oleh _LINUX define , meskipun saya membutuhkan sesuatu yang sama sekali berbeda. Tetapi meskipun demikian, program mulai dan bekerja, tetapi hanya menyimpan pengaturannya di tempat yang diperlukan. Saya memprioritaskan dengan benar, membangun kembali paket dan masalahnya telah sepenuhnya diselesaikan.<< Lompat ke konten11. Finalisasi program KeymapSwitcher
Baru-baru ini, banyak sistem operasi populer telah beralih ke pintasan keyboard baru Meta / Opt / Cmd / Win + Space untuk mengganti tata letak keyboard. Sepertinya saya sangat nyaman karena sekarang saya tidak perlu mengubah apa pun dan mengkonfigurasinya. Anda duduk di komputer mana pun yang menjalankan macOS, Windows atau Linux dengan shell GNOME 3 dan kombinasi yang mudah untuk mengubah bahasa input ini hanya berfungsi di mana saja. Bahkan sistem operasi seluler Android memiliki analognya. Secara umum, saya beralih ke cara pintas keyboard ini sejak lama dan menjadi sangat terbiasa.Saya sangat menyesal, KeymapSwitcher , Haiku, , - . . , Haiku, . , HaikuPorts . , KeymapSwitcher Haiku, API - .
KeymapSwitcher di Haiku dengan pintasan keyboard populer untuk beralih tata letak keyboard.Terlepas dari kenyataan bahwa saya takut dengan kompleksitas kode KeymapSwitcher, saya dengan cepat menemukan tempat yang tepat berkat komentar dan memperkenalkan tambalan kecil ke dalam kode program, yang sangat memudahkan pengetikan teks apa pun di Haiku. Satu-satunya kekurangan kecil yang saya tidak bisa atasi adalah bahwa kunci Opt perlu dirilis untuk mengganti bahasa. Yaitu, tahan Optdan ruang untuk beralih di antara bahasa yang dipilih tidak akan berfungsi. Tapi ini sama sekali tidak mengganggu pengalihan bahasa selama pengetikan, jadi saya mengirim patch ke repositori program dan memperbarui paket aplikasi di HaikuPorts, setelah itu versi baru KeymapSwitcher tersedia untuk instalasi bagi semua pengguna Haiku.Kode sumber proyek: https://github.com/HaikuArchives/KeymapSwitcherSaya harap saya bukan satu-satunya pengguna pintasan keyboard ini untuk beralih tata letak keyboard.<< Lompat ke konten12. Kesimpulan
Mempelajari API Haiku, serta menyelesaikan berbagai masalah eksotis yang muncul sebagai akibat porting aplikasi baru dan yang diperbarui untuk sistem operasi ini, membawakan saya banyak pengalaman dan kesenangan berharga. Saya dapat mempromosikan patch dukungan Haiku dalam repositori kode sumber dari beberapa proyek besar dan bertemu orang-orang baru yang menarik yang entah bagaimana terkait dengan sistem operasi yang indah ini.Berbagai aplikasi berjalan pada sistem operasi Haiku.Saya sangat berharap bahwa di masa depan semua masalah hari ini, seperti kurangnya akselerasi perangkat keras 3D dan browser populer, serta dukungan yang buruk untuk perangkat keras modern, akan berhasil diselesaikan dan Haiku akan menerima gelombang darah baru dari pengembang dan pengguna yang akan menghargai kemampuan unik dan desain aslinya. . Untungnya, perkembangannya masih jauh dari diam dan hari ini di forum lokal sistem operasi ini topik hangat tentang percepatan 3D dan porting perpustakaan GTK + 3 dinaikkan , dan kemungkinan porting komponen QtWebEngine dibahas dalam repositori HaikuPorts.. Port GTK + 3 dapat mencakup kemungkinan untuk meluncurkan dan menjalankan browser Firefox dan Chromium yang populer, dan QtWebEngine akan memungkinkan menggunakan mesin Blink di browser modern berdasarkan kerangka kerja Qt, seperti Otter Browser atau Falkon .Sudah sekarang saya dapat merekomendasikan sistem operasi ini kepada mereka yang memiliki laptop atau netbook yang lama dan lemah, misalnya, daripada distribusi Lubuntu atau Windows XP. Anda akan kagum pada seberapa cepat dan responsif kerjanya. Ya, Anda harus membatasi diri sedikit untuk melihat beberapa situs karena browser lama dan banyak gangguan yang dikaitkan dengan mereka, tetapi untuk sebagian besar kasus pada perangkat keras lama batasan ini tidak memiliki arti penting.Semua port dan peningkatan saya telah dipublikasikan dan tersedia untuk instalasi bagi semua pengguna Haiku. Semua perubahan pada kode sumber tersedia di repositori masing-masing di bawah lisensi aslinya. Dalam karya ini, saya menggunakan sejumlah besar bahan, yang utamanya akan saya soroti dalam tautan yang bermanfaat di bawah ini. Banyak terima kasih kepada stackoverflow.com dan google.com untuk berada di sana.1. Situs web resmi sistem operasi Haiku .2. Forum resmi sistem operasi Haiku .3. Dokumentasi resmi untuk pengguna Haiku .4. Dokumentasi resmi untuk pengembang Haiku .5. Deskripsi fitur antarmuka pengguna grafis Haiku .6. Rekomendasi untuk membuat ikon untuk aplikasi Haiku .7. Deskripsi program Icon-O-Matic dan tips untuk penggunaannya .8. Deskripsi format ikon HVIF vektor .9. Dokumentasi resmi untuk kerangka Interface Kit .10. Dokumentasi resmi untuk kerangka Perangkat Lokal .11. Artikel tentang aspek pelokalan aplikasi untuk Haiku .12. Dokumentasi resmi untuk Layout API .13. Serangkaian artikel yang menggambarkan implementasi API Layout di Haiku .14. GitHub repositori dari kode sumber sistem operasi Haiku .15. GitHub repositori dari pohon resep HaikuPorts .16. Versi Internet dari repositori paket HPKG siap pakai Haiku Depot Web .17. Artikel menarik "Haiku: lamp geek-OS" di blog pengembang INSTEAD, Peter Kosykh .18. The Haiku: Artikel pencelupan di blog pengembang INSTEAD, Pyotr Kosykh .19. Kursus pelajaran pemrograman "Belajar Program dengan Haiku" dari DarkWyrm .20. Kursus pelajaran pemrograman "Pemrograman dengan Haiku" dari DarkWyrm .21. Publikasi "Adakah Kehidupan di Haiku?" pada sumber daya Linux.org.ru, dari saya .22. Konferensi di Telegram IM, didedikasikan untuk pembahasan sistem operasi Haiku .Selamat kepada semua pengguna sumber dayahabr ! , , 2019 !
<<