- 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
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
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.
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.
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.
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.
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.
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?
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?
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.
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.
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?
Bagian pendahuluannya juga bagus untuk dibaca: https://pages.cs.wisc.edu/~remzi/OSTEP/dialogue-virtualizati...
https://wiki.osdev.org/ memiliki detail platform dan materi lainnya.