Feral adalah kernel monolitik, sama seperti proyek hobi kecil untuk membangun sistem operasi lengkap dari awal, bahkan jika itu sangat lambat.
Feral dirancang untuk berjalan pada sistem PC baru -baru ini dengan BIOS yang cukup kompatibel. Untuk saat ini, liar tidak mendukung UEFI, meskipun port sedang berlangsung.
Feral, untuk saat ini, mengasumsikan keberadaan dua foto 8259A yang ada dalam mikrokomputer tradisional PC yang kompatibel. Pada micro modern, Southbridge Anda, seperti X399 atau X470, mungkin memiliki sesuatu yang kompatibel. Di masa depan, Feral bermaksud untuk beralih ke pemanfaatan fitur prosesor yang lebih baru, seperti APIC, dan akhirnya xapic dan x2apic. Selain itu, liar akan mendukung multiproses simetris.
Saat ini, perangkat keras yang diuji termasuk PC dengan motherboard 4 "x4" dan CPU N3700 ("Braswell") dengan 4GB RAM, laptop 17Z dengan 2500U (Zen 1 yang disebutkan di atas), dan di masa depan, x5-Z8350 dengan 2GB Ram ("Cherry Trail").
Di masa depan, liar dimaksudkan untuk berjalan di AARCH64 (BCM2711), Power (SFORZA), dan perangkat keras RV64GC (U540), dengan port yang ditulis di suatu tempat dalam urutan itu.
Secara arsitektural, liar adalah kernel monolitik sederhana, yang secara arsitektur memiliki banyak serupa dengan Mach dan Rencana 9, terutama yang terakhir. Feral lebih suka menempatkan sebagian besar fungsionalitas ke dalam pengemudi, daripada secara langsung dipanggang ke dalam kernel itu sendiri, untuk memungkinkan lebih banyak fleksibilitas, dan untuk mengekspos sumber daya sebagai lokasi jaringan dan soket, untuk lebih mencerminkan cara kerja modern dan penyimpanan.
Misalnya, untuk membuka file, satu menanyakan server file, yang merupakan proses yang dimiliki oleh kernel, yang membuka soket yang menerima lalu lintas yang masuk. Kemudian dapat dibaca dari, atau ditulis ke, tergantung pada bagaimana soket dibuka.
Gagasan utamanya adalah untuk mengambil modularitas dan fleksibilitas microkernels dan mencangkoknya menjadi arsitektur kernel monolitik tradisional, mengorbankan kemampuan untuk melakukan hal -hal seperti restart driver sistem file sambil mempertahankan manfaat seperti arsitektur bersih, pelapisan pengemudi, dan beberapa penyedia pengemudi.
Feral diciptakan bagi saya untuk mempelajari lebih lanjut tentang desain sistem operasi, sambil berangkat dari cara tradisional "membuat klon nix" tradisional "untuk melakukan ini: tidak ada yang salah dengan itu, tetapi saya ingin mengeksplorasi berbagai cara untuk mengekspos perangkat keras dan fitur sistem ke program selain hanya membuat file di suatu tempat. Selain itu, saya ingin mengeksplorasi betapa berbedanya OS baru dari sistem tradisional sambil mudah untuk port perangkat lunak yang ada.
Sementara gambar ini sudah ketinggalan zaman, karena beberapa subsistem ini harus diserap ke dalam kernel, sebagian besar ini akurat untuk niat:
Feral sekarang menggunakan cmake untuk membangun. Skrip utilitas disertakan untuk kasus umum bangunan untuk x86_64 dan qemu di vm_test.sh , dan dengan stub GDB diaktifkan di vm_test_gdb.sh .
Untuk membangun secara manual, Anda harus menggunakan dentang sebagai kompiler C Anda. Untuk target X86-64-PC tanpa dukungan EFI, Anda dapat menggunakan file Toolchain CMake/x86_64-pc.cmake dengan -DCMAKE_TOOLCHAIN_FILE=cmake/x86_64-pc.cmake parameter. Ini akan membangun kernel yang tepat sebagai 'feralker', dan beberapa langkah tambahan akan diperlukan untuk membuat file ISO yang dapat di -boot. Lihat file vm_test.sh untuk detailnya.
Feral harus berjalan dengan nyaman pada PC apa pun yang menerapkan set instruksi X86-64 (yaitu, setidaknya K8 CPU), dan setidaknya 1GB memori sistem. Persyaratan memori ini akan diturunkan di masa depan, tetapi untuk saat ini diperlukan untuk membuat segalanya sedikit lebih mudah ketika menyiapkan kernel pada awalnya.
Feral mengharapkan adaptor tampilan yang kompatibel dengan VGA hadir untuk PC. Dengan demikian, Anda membutuhkan beberapa bentuk adaptor video yang mampu berjalan dalam mode VGA. Sebagian besar CPU dan GPU kelas konsumen menerapkan ini di setidaknya satu dari GPU mereka.
Saat ini, Feral diuji secara eksklusif pada mesin virtual di atas Zen 1 1950X, dan beberapa mesin Zen 1 yang lebih kecil. Kemungkinan liar akan berjalan dengan baik pada perangkat keras lain, tetapi tidak diuji.
Folder harus dinamai dengan cara untuk menghindari karakter yang tidak perlu (yaitu, 'Inc' vs 'termasuk'.) Demikian juga, untuk modul yang diberikan, nama folder harus mencerminkan awalan, sehingga manajemen memori ada dalam "MM", dan manajemen objek ada di "OB", dan sebagainya.
Fungsi yang harus diekspor antar modul umumnya harus memiliki konvensi penamaan (subsistem) (fungsi fungsi) (tipe opsional-argumen), seperti "KestartProcessor". Ketika fungsinya khusus arsitektur, maka harus diawali dengan arsitektur yang dimiliki, seperti "Aarch64StartPaging ()", atau "x86setupidt ()". Untuk detail lebih lanjut, lihat format.txt
Selain itu, fungsi harus menggunakan makro di, inout, opt, dll. Untuk mengidentifikasi dengan jelas apa yang dilakukan fungsi dengan argumen. Makro ini berkembang menjadi apa -apa, dan hanya ada untuk membantu dalam dokumentasi.
Kernel inti ringan. Mayoritas fungsionalitas pada pengemudi. Proses yang berkomunikasi dengan libos (syscall pergi ke meja kernel yang memberi tahu seorang pengemudi libos bahwa ini disebut.)
Pengemudi menangani panggilan sistem untuk memungkinkan menjalankan program "asing" yang tidak dimodifikasi, seperti versi GNU Mach dari GCC, atau game DOS favorit semua orang di Mars.
Stabil, Kernel Internal Abi. Pengemudi pihak ketiga harus bekerja di seluruh revisi kecil. Gunakan pointer pnext untuk perubahan serius.
Termasuk sistem file yang stabil dan versi, sehingga deltree yang tidak disengaja tidak menghapus semuanya selamanya. Asumsikan pengguna tidak membuat cadangan.
(Akhirnya) menciptakan pengemudi yang sepenuhnya patuh pada Vulkan untuk keluarga GPU "Vega" dan "Navi".
Dukung ekstensi virtualisasi x86-64 ("Pacifica").
Sesuatu seperti penjara atau wadah chroot, agar liar berguna untuk operasi server.
Sesuatu yang menyenangkan untuk dikerjakan yang mungkin bermanfaat suatu hari nanti?