1 poin oleh GN⁺ 2025-04-26 | 1 komentar | Bagikan ke WhatsApp
  • TacOS adalah OS hobi bergaya UNIX-like berbasis kernel sendiri yang ditulis dari nol dengan C dan assembly, serta dapat menjalankan DOOM dan beberapa program userspace kecil
  • Kernel mencakup VFS, scheduler, TempFS, perangkat, context switching, manajemen memori virtual, alokasi frame halaman fisik, dan porting Doom
  • Lingkungan eksekusi mendukung hardware sungguhan maupun emulator Qemu, dengan hardware sungguhan diuji di laptop pembuatnya
  • Build dan eksekusi dimulai dengan git clone lalu make run, serta memerlukan Xorriso, Qemu, NASM, dan Clang terpasang
  • TacOS belum cukup matang untuk penggunaan nyata dan merupakan toy OS untuk hobi, dengan beberapa bug yang sudah diketahui

Ikhtisar TacOS

  • TacOS adalah OS from-scratch yang ditulis dengan C dan assembly, serta memiliki kernel sendiri
  • Terdiri dari kernel bergaya UNIX-like, dan dapat menjalankan DOOM serta beberapa program userspace kecil
  • Komponen utamanya adalah sebagai berikut
    • VFS
    • Scheduler
    • TempFS
    • Perangkat
    • Context switching
    • Manajemen memori virtual
    • Alokasi frame halaman fisik
    • Porting Doom

Lingkungan eksekusi dan batasan

  • TacOS dapat berjalan di hardware sungguhan dan emulator Qemu
  • Pengujian di hardware sungguhan dilakukan di laptop pembuatnya
  • Proyek ini bukan OS matang yang bisa digunakan secara nyata, melainkan toy OS untuk hobi
  • Ada beberapa bug yang sudah diketahui

Mulai cepat

  • Build dan eksekusi dapat dilakukan dengan perintah berikut
git clone https://github.com/UnmappedStack/TacOS
cd TacOS && make run
  • make run akan membangun TacOS dan menjalankannya otomatis di emulator Qemu
  • Tool yang diperlukan adalah sebagai berikut
    • Xorriso
    • Qemu
    • NASM
    • Clang

Perintah build

  • make run: Membangun TacOS dan menjalankannya di Qemu
  • make qemu: Menjalankan TacOS yang sudah dibangun di Qemu
  • make disk: Membangun image disk lengkap sebagai tacos.iso
  • make kernel: Membangun kernel TacOS, inti sistem
  • make libc: Membangun library standar
  • make userspace: Membangun aplikasi userspace
  • make initrd: Membuat initial ramdisk yang akan digunakan sistem saat boot
  • make lint: Menjalankan aturan linter untuk kernel
  • make qemu-gdb: Menjalankan TacOS di Qemu dengan GDB terhubung

Debugging

  • Untuk memasang GDB saat menguji TacOS, jalankan make qemu-gdb, lalu hubungkan ke target remote GDB dari terminal lain
$ gdb -q
(gdb) target remote :1234
(gdb) file kernel/bin/tacos
(gdb) continue
  • Saat men-debug kernel, tentukan kernel/bin/tacos
  • Saat men-debug program userspace, tentukan initrd/usr/bin/<program>

Lisensi dan aturan kontribusi

  • TacOS menggunakan Mozilla Public License 2.0
  • Kontribusi terbuka, tetapi sebelum pull request, Anda harus membuka issue dan mendapat penugasan untuk perubahan tersebut
  • Pull request yang hanya berisi perbaikan typo atau tata bahasa sederhana tidak akan di-merge
  • Pesan commit harus mengikuti format [component] change
  • Pull request yang memuat ribuan baris perubahan dari beberapa komponen yang tidak terkait dalam satu commit raksasa tidak akan masuk proses review

Komunitas

  • Tersedia server Discord untuk pembaruan terkait TacOS, bantuan proyek OSDev, dan diskusi

1 komentar

 
GN⁺ 2025-04-26
Komentar Hacker News
  • Selamat! Pasti membanggakan, dan pilihan DOOM sebagai proof of concept juga bagus.
    Mungkin terasa antiklimaks karena ini cuma pertanyaan pemula, tapi saya penasaran prosedur apa yang diperlukan untuk menjalankannya di laptop.
    Setelah build selesai, apakah prosesnya mirip menyiapkan dual boot di PC Windows? Agak lucu juga saya bertanya kepada orang asing di internet tentang cara menjalankan software berisiko di komputer saya.
    Kalau ingin mencoba proyek seperti ini, saya juga penasaran apakah ada buku ajar atau bacaan yang direkomendasikan. Saya pernah mengambil mata kuliah sistem operasi dan mata kuliah terkait di universitas, tapi karena jurusan saya teknik elektro, semuanya sangat abstrak dan berpusat pada konsep. Akan bagus kalau ada materi yang lebih konkret, dan tidak harus x64.

    • Sama sekali tidak antiklimaks! Cara saya menjalankannya di laptop saya secara harfiah hanya memformat USB sebagai ISO lalu boot dari USB.
      Kalau ingin mencoba menulis kernel, saya sarankan mulai dengan https://osdev.wiki, lalu membaca spesifikasi terkait seperti Intel Developer Manual dan juga spesifikasi driver yang akan Anda tulis sendiri.
      Saya tidak terlalu tahu pengembangan kernel non-x86, tapi sejauh yang saya tahu, sebagian besar konsepnya sama dan hanya implementasi teknisnya yang berbeda. Di README proyek ada tautan ke server Discord, dan di sana ada banyak orang yang benar-benar pintar dan pasti bersedia membantu.
    • Saya juga menulis kernel, meski belum selesai, dan saya mendokumentasikan semua langkah yang saya tempuh. Banyak orang bilang itu berguna: https://0xc0ffee.netlify.app/osdev
  • Bagus sih, tapi apakah taco kamu juga bisa menjalankan DOOM?
    Bercanda; ini benar-benar upaya yang patut dipuji, kerja bagus! Yang saya penasaran, saat membuat TacOS apakah DOOM dijadikan target standar semacam itu, atau sejak awal tujuannya membuat sistem operasi khusus yang hanya menjalankan DOOM?
    Saya bertanya murni karena penasaran. Hampir 30 tahun lalu saya pernah membuat sistem operasi yang sangat kerangka dan sekadar bisa boot untuk belajar dan bersenang-senang; kalau ada sistem operasi khusus yang praktis hanya bisa menjalankan DOOM dan portabel ke mana-mana, meme “apakah ini bisa menjalankan DOOM?” akan jadi jauh lebih ironis dan lucu.
    Kerja yang keren, semoga terus dilanjutkan.

    • Bukan hanya bisa menjalankan Doom; itu hanya milestone terbaru yang saya port.
      Untuk menjalankan Doom sendiri butuh kira-kira seminggu, termasuk menambahkan kebutuhan libc, dan ada jauh lebih banyak pekerjaan fondasi yang sudah dikerjakan sebelumnya.
      Saya menggunakan DoomGeneric, yang pada dasarnya adalah fork Doom yang dibuat sangat portabel. Semoga ini menjawab pertanyaan Anda, meski mungkin saja saya salah memahami maksudnya.
  • Melompat dari kernel yang dibuat dari nol langsung ke DOOM rasanya seperti sertifikasi hacker tingkat atas. Melihatnya berjalan di hardware nyata pasti sangat membahagiakan, dan itu sangat keren.

    • Memang cukup membahagiakan melihatnya berjalan di hardware nyata. Kernel-nya tidak persis langsung masuk ke Doom; strukturnya boot ke shell dulu, lalu dari sana Doom bisa dijalankan.
  • Sedikit menyimpang, tapi saya pernah bertanya-tanya tentang hal serupa. Saya penasaran apakah pernah ada banyak upaya membuat game yang boot langsung di hardware PC modern.
    Maksudnya masuk langsung ke game tanpa memuat sistem operasi penuh, mirip konsol game generasi lama. Agar tetap sederhana, Wi-Fi, Bluetooth, GPU, dan semacamnya mungkin sulit dimanfaatkan tanpa driver modern, tapi keyboard dan mouse tampaknya cukup mungkin karena ada akses BIOS dasar. Istilah saya mungkin salah, tapi semoga maksudnya tersampaikan.

    • Saya tidak tahu apakah ini banyak dipakai, tapi ini metode yang dikenal dan memang bekerja. Saya melakukan hal seperti ini dalam eksperimen awal assembly x86-16, tetapi akhirnya memakai DOS sebagai peluncur program supaya bisa menggunakan dosbox-staging, emulator yang lebih mudah dipakai daripada qemu.
      Kalau tidak ingin masuk ke I/O disk, batasan besarnya adalah 512 byte atau kurang. Karena pada dasarnya program itu dijalankan sebagai master boot record. Kalau butuh ruang lebih banyak, Anda perlu membaca beberapa LBA dari disk; ada interrupt untuk itu, dan osdev juga punya materi yang lebih baik.
      Selain itu, perbedaan antara file .com, biasanya dengan batas segmen tunggal 64KB, dan program bootable bergaya MBR cukup kecil.
  • Pekerjaan yang benar-benar keren. Saya juga ingin punya kemampuan untuk melakukan hal seperti ini, tapi untuk mencapainya pasti harus membaca banyak spesifikasi, dan itu bagian terlemah saya.
    Mungkin ini pertanyaan bodoh, tapi kalau ingin memakai akselerasi GPU dalam bentuk yang sangat kecil sekalipun, seberapa sulit membuat driver GPU? Menurut Anda, apakah dokumentasinya bagus?

    • Itu mungkin wilayah ekstrem dalam pengembangan sistem operasi, dan setidaknya untuk driver GPU yang benar-benar bisa dibeli, kemungkinan besar saya pun tidak bisa melakukannya.
      GPU emulasi di Qemu dokumentasinya cukup lumayan, jadi mungkin bisa, tetapi GPU seperti Nvidia dokumentasinya buruk dan sampai belum lama ini dokumentasinya sepenuhnya tertutup. Linux juga kesulitan dengan masalah ini, dan saya pernah melihat beberapa pengembang OS hobi yang akhirnya mengambil driver GPU Linux untuk dipakai.
      Tidak banyak hal yang saya tandai hampir mustahil, tetapi menulis driver GPU yang benar-benar layak untuk GPU umum sejujurnya tidak terasa seperti sesuatu yang suatu hari bisa saya lakukan.
  • Hai unmapped, saya memakai nama ThatOSDeveloper di GitHub dan Discord, dan itu nama tampilan saya. Saya tidak tahu TacOS sudah menjalankan Doom, itu cukup keren.
    Ada beberapa hal yang saya penasaran: apakah ini Doom asli, apakah ada di disk atau di initramfs, dan apakah bersama engine yang dipakai Anda menggunakan Freedoom atau shareware Doom WAD?

    • Seperti yang bisa dilihat di tulisan, ini doomgeneric, dan seperti yang bisa dilihat di bagian atas halaman ini, modifikasinya cukup sedikit.
    • Saya menggunakan DoomGeneric, fork Doom yang portabel. Ia berada di atas TempFS yang dimuat dari initrd, dan menggunakan doom1.wad.
  • Sangat keren, tapi sekarang ada bahasa tingkat rendah yang memory-safe, jadi saya penasaran kenapa memilih bahasa yang tidak aman. Kita semua sudah tahu kebanyakan bug keamanan terkait memori.
    Saya paham ini proyek hobi, tapi saya tidak mengerti kenapa kita tidak memensiunkan bahasa yang tidak aman ketika ada alternatif yang lebih baik.

    • Terutama karena C jauh lebih sederhana, dan dalam pengembangan kernel, kesederhanaan adalah segalanya.
      Saya pernah memakai Rust di proyek lain, tetapi dalam pengembangan kernel saya merasa jauh lebih ingin memakai bahasa yang sederhana dan mudah dibaca daripada bahasa yang aman.
  • Selamat datang di klub! Saya pernah melakukan hal yang hampir sama, dan benar-benar menikmati ketenangan membuat sesuatu yang tidak akan pernah berujung menjadi produk.
    https://jakobbr.eu/2024/08/19/writing-my-own-x86_64-operatin...

  • Proyek yang benar-benar keren! Saya penasaran bagaimana TacOS menangani isolasi proses dan scheduling.

    • Untuk memori virtual, kami menggunakan paging sehingga setiap proses memiliki ruang alamatnya sendiri.
      Ada scheduler round-robin yang terhubung ke driver PIT; setiap 10 ms PIT memicu interrupt dan scheduler berjalan. Scheduler memilih task berikutnya, menyimpan status saat ini dari task sebelumnya, beralih ke ruang alamat baru, mengganti stack, memulihkan register task, lalu beralih ke mode pengguna ring 3 dengan instruksi iretq sambil melompat ke instruction pointer.
  • Saya ingin tahu lebih banyak tentang TacOS. Bagaimana mengelola agar beberapa program bisa berjalan bersamaan dengan aman?