3 poin oleh GN⁺ 2024-05-25 | 1 komentar | Bagikan ke WhatsApp

Proyek pemrograman baru: Bunnix

Latar belakang proyek

  • Belakangan ini, untuk sejenak menjauh dari "pekerjaan sungguhan", saya memulai proyek pemrograman baru yang berisiko rendah dan murni untuk bersenang-senang.
  • Sejak 21 April, saya memutuskan untuk melihat sejauh mana saya bisa membuat sistem operasi mirip Unix untuk target x86_64 dalam waktu sekitar satu bulan.
  • Hasilnya adalah sebuah sistem operasi bernama Bunnix.
  • Total ada 27 hari yang saya investasikan untuk proyek ini.

Demo Bunnix

  • Menyediakan file ISO Bunnix 0.0.0.
  • Dapat di-boot menggunakan QEMU:
    qemu-system-x86_64 -cdrom bunnix.iso -display sdl -serial stdio
    
  • ISO juga bisa ditulis ke USB stick lalu di-boot pada perangkat keras nyata.
  • Kemungkinan besar akan berjalan di sebagian besar perangkat AMD64.
  • Keterbatasan: karena tidak ada dukungan USB, diperlukan keyboard PS/2.

Komponen Bunnix

  • Kernel Bunnix terutama ditulis dengan Hare, dengan beberapa komponen C (lwext4, libvterm) disertakan.
  • Driver yang didukung:
    • PCI (legacy)
    • perangkat blok AHCI
    • tabel partisi GPT dan MBR
    • keyboard PS/2
    • port serial platform
    • jam CMOS
    • framebuffer (diatur oleh bootloader)
    • sistem berkas ext4 dan memfs
  • Fitur kernel yang didukung:
    • sistem berkas virtual
    • berbagai perangkat /dev
    • emulator terminal dan dukungan termios
    • sekitar 40 system call (misalnya clock_gettime, poll, openat, fork, exec, dll.)
  • Bunnix adalah sistem pengguna tunggal, dan saat ini tidak menegakkan mode berkas Unix maupun kepemilikan.

Bootloader

  • Menyertakan dua bootloader:
    • Boot legacy: ditulis dengan Hare.
    • Boot EFI: ditulis dengan C.
  • Memuat kernel sebagai file ELF, dan juga memuat initramfs bila diperlukan.

Perangkat lunak ruang pengguna

  • Sebagian besar terdiri dari perangkat lunak pihak ketiga:
    • Colossal Cave Adventure (advent)
    • dash (/bin/sh)
    • Doom
    • gzip
    • less (pager)
    • lok (/bin/awk)
    • lolcat
    • mandoc (halaman man)
    • sbase (core utils)
    • tcc (kompiler C)
    • Vim 5.7
  • libc diturunkan dari musl libc dan dimodifikasi sesuai kebutuhan Bunnix.

Proses pengembangan Bunnix

  • Proses pengembangan didokumentasikan di Mastodon.
  • Sebagian kode Bunnix diambil dari proyek sebelumnya, Helios.
  • Dukungan ext4 dan integrasi terminal virtual adalah bagian yang paling sulit.
  • Implementasi scheduler dan penanganan sinyal juga menantang.
  • Porting perangkat lunak pihak ketiga relatif mudah berkat basis musl libc.

Hal yang dipelajari

  • Saya belajar banyak tentang sistem berkas.
  • Pendekatan terhadap driver menjadi lebih sederhana.
  • Saya jadi memahami kompleksitas penanganan sinyal.
  • Saya memastikan bahwa allocator bitmap efektif dalam manajemen memori.
  • Saya menyadari bahwa kernel monolitik jauh lebih mudah diimplementasikan daripada mikrokernel.

Rencana ke depan

  • Bunnix adalah proyek untuk waktu senggang, dan saat ini saya tidak berencana menginvestasikan waktu lagi untuknya.
  • Ke depannya saya akan kembali ke proyek Helios dan menerapkan banyak pelajaran yang didapat.
  • Prioritas peningkatan Bunnix:
    • cache sistem berkas
    • perbaikan bug ext4
    • procfs dan top
    • file mmap
    • lebih banyak sinyal (misalnya SIGSEGV)
    • dukungan multi-pengguna
    • perangkat blok NVMe
    • perangkat blok IDE
    • dukungan ATAPI dan ISO 9660
    • dukungan Intel HD Audio
    • stack jaringan
    • toolchain Hare di sistem dasar
    • self-hosting

Opini GN⁺

  • Nilai Bunnix: Bunnix adalah contoh yang bagus dari kernel hacking menggunakan bahasa Hare, dan bisa menarik bagi pengembang yang ingin mempelajari bahasa serta teknologi baru.
  • Perancangan sistem berkas: Perancangan sistem berkas adalah bagian penting dalam pengembangan sistem operasi, dan Bunnix bisa menjadi sarana untuk mempelajari banyak hal.
  • Monolitik vs mikrokernel: Ini adalah contoh yang baik untuk membandingkan kelebihan dan kekurangan kernel monolitik dan mikrokernel, serta memberi pemahaman yang lebih mendalam tentang perancangan sistem operasi.
  • Partisipasi komunitas: Bunnix adalah proyek open source, dan berpotensi berkembang lebih jauh melalui partisipasi serta kontribusi komunitas.
  • Peningkatan di masa depan: Rencana peningkatan Bunnix ke depan memberi peluang belajar yang baik bagi orang-orang yang tertarik pada pengembangan sistem operasi.

1 komentar

 
GN⁺ 2024-05-25
Komentar Hacker News

Ringkasan kumpulan komentar Hacker News

  • This is really cool. Reminds me of the original Unix was invented in a couple weeks while Ritchie's family went on vacation to CA to visit his in-laws.

    • Ini benar-benar keren. Mengingatkan pada saat Unix asli diciptakan hanya dalam beberapa minggu ketika keluarga Ritchie pergi berlibur ke CA untuk mengunjungi keluarga mertuanya.
  • I also finally learned how signals work from top to bottom, and boy is it ugly. I’ve always felt that this was one of the weakest points in the design of Unix and this project did nothing to disabuse me of that notion.

    • Saya akhirnya memahami bagaimana signal bekerja dari awal sampai akhir, dan wah, ternyata jelek sekali. Saya selalu merasa ini adalah salah satu titik terlemah dalam desain Unix, dan proyek ini sama sekali tidak mengubah pandangan itu.
  • Impressive, super cool, and inspiring!

    • Mengesankan, sangat keren, dan menginspirasi!
  • Example of “creating something impressive in X days” requires a lot of experience and talent that is built over years.

    • Contoh “membuat sesuatu yang mengesankan dalam X hari” membutuhkan banyak pengalaman dan bakat yang dibangun selama bertahun-tahun.
  • It was really cool watching the ~daily updates on this on Mastodon - seeing how someone so skilled gradually pieces together a complex piece of software.

    • Sangat keren mengikuti pembaruan yang hampir harian tentang ini di Mastodon — melihat seseorang yang begitu terampil secara bertahap merangkai perangkat lunak yang kompleks.
  • From "Linux System Call Table – Chromiumos"

    • Dibagikan referensi tentang tabel system call Linux.
  • Code is here: Git Repository

  • Hare looks like an interesting language. Though this limitation will limit its adoption in this multicore age I think:

    • Hare tampak seperti bahasa yang menarik. Namun, saya rasa keterbatasan ini akan membatasi adopsinya di era multicore saat ini:
  • Very cool. Most of these Unix clones are usually written in C. This one is written in a new programming language.

    • Sangat keren. Kebanyakan clone Unix seperti ini biasanya ditulis dalam C. Yang ini ditulis dengan bahasa pemrograman baru.
  • Quite cool, by making use of Hare instead.

    • Cukup keren, karena menggunakan Hare.
  • Waiting for an OS that treats GPU(s) as a first class citizen ...

    • Menunggu OS yang memperlakukan GPU sebagai warga kelas satu ...