4 poin oleh GN⁺ 2025-04-27 | 1 komentar | Bagikan ke WhatsApp
  • RetrOS-32 adalah sistem operasi hobi 32-bit yang sepenuhnya kustom dan berfokus pada arsitektur i386, mencakup grafis, multitasking, dan networking
  • Kernel, utilitas, dan sistem build ditulis dalam C dan Assembly, aplikasi ruang pengguna ditulis dalam C++, serta Make dan Docker digunakan untuk build
  • Perangkat keras nyata yang diuji mencakup Lenovo x240, seri Asus Eee PC, Dell Optiplex 780, Samsung N150 Plus, Samsung NP-NC10, dan IBM Thinkpad a21p
  • Cara menjalankannya mendukung QEMU, v86 dari copy.sh, dan booting di perangkat keras nyata; di perangkat nyata, gunakan GRUB ISO dengan membakar file .iso ke USB atau CD
  • Roadmap mencantumkan bootloader, penjadwalan multithread preemptive, filesystem, window manager grafis, network stack, thread ruang pengguna, terminal virtual jarak jauh TCP, dan lainnya sebagai item yang sudah diimplementasikan

Ikhtisar RetrOS-32

  • RetrOS-32 adalah proyek sistem operasi hobi 32-bit yang berfokus pada arsitektur i386
  • Deskripsi proyek menyebutnya sebagai sistem operasi hobi 32-bit dengan grafis, multitasking, dan networking
  • Tanggal mulai tercatat sebagai 12 Mei 2022
  • Halaman proyek terhubung ke Project OSHub page

Login dan pengguna

  • Pengguna bawaan ada 3: system, admin, dan guest
  • Kata sandi admin adalah admin, sedangkan guest tidak memiliki kata sandi
  • Saat ini tidak ada perbedaan antara admin dan guest
  • Pengguna dapat dibuat dengan perintah admin create <username> <password>

Bahasa implementasi dan konfigurasi build

  • Kernel, utilitas, dan sistem build ditulis dalam C dan Assembly
  • Aplikasi ruang pengguna ditulis dalam C++
  • Kompilasi menggunakan Make
  • Kompilasi lintas platform menggunakan Docker

Perangkat keras yang diuji

  • Daftar perangkat keras nyata yang telah diuji adalah sebagai berikut
    • Lenovo x240
    • Seri Asus Eee PC
    • Dell Optiplex 780
    • Samsung N150 Plus
    • Samsung NP-NC10
    • IBM Thinkpad a21p

Cara build dan menjalankan

  • Di lingkungan lintas platform, diperlukan Docker untuk mengompilasi file image dan QEMU untuk emulasi
  • Dependensi kompilasi native berbeda-beda menurut platform
    • MacOS: i386-elf-gcc, i386-elf-ld, i386-elf-g++
    • Linux / WSL Ubuntu: build-essential, gcc-multilib
    • Jika ingin menggunakan GRUB sebagai bootloader, grub2, xorriso, dan xxd juga diperlukan
  • Di Linux, build dan menjalankan dilakukan berurutan dengan clone repositori, ./debian.sh, inisialisasi Git submodule, make compile, make img, lalu make qemu
  • Di MacOS, kompilasi native saat ini tidak memungkinkan karena tool build bergantung pada kode x86 32-bit, sehingga Docker adalah cara paling sederhana
  • Windows menggunakan Docker atau WSL
  • Ada tiga cara menjalankan
    • Mengunggah file .img sebagai hard disk image di copy.sh v86
    • Menjalankan make qemu atau qemu-system-i386 <image name> di QEMU
    • Di perangkat keras nyata, membakar file .iso ke USB atau CD dan menggunakan GRUB ISO

Struktur proyek

  • Struktur repositori dibagi menjadi direktori kernel, driver, grafis, jaringan, filesystem, library, aplikasi ruang pengguna, pengujian, dan tool
  • boot berisi bootloader kustom dan multiboot.ld
  • kernel berisi sumber utama kernel, kode khusus arsitektur, dan kode thread kernel
  • apps berisi aplikasi ruang pengguna serta libcore.a, libgraphic.a, dan libnet.a
  • net berisi kode networking, sedangkan fs berisi kode terkait filesystem
  • tools mencakup tool build dan skrip

Item yang selesai diimplementasikan dan pekerjaan tersisa

  • Untuk item terkait booting, bootloader kustom, kompatibilitas GRUB, dan bootloader Stage 2 sudah selesai
  • Fitur kernel dan sistem mencakup hal-hal berikut
    • Penjadwalan preemptive multithread
    • Pemisahan kernel dan ruang pengguna berbasis GDT dan TSS
    • Penanganan interrupt
    • IPC
    • System call
    • Thread ruang pengguna
  • Fitur terkait driver dan perangkat keras mencakup keyboard dan mouse PS/2, PIT, VESA 640x480x8, RTC, Serial, E1000, dan PCI
  • Di sisi filesystem dan storage, driver ATA IDE, filesystem mirip Ext2, FAT16, serta baca/tulis sudah selesai
    • FAT16 mendukung file hingga 32MB
    • Atapi masih belum selesai
  • Fitur memori mencakup memori virtual 32-bit, kalloc/kfree kernel, serta malloc/free ruang pengguna
  • Fitur grafis mencakup window manager, GFXLib, rendering double framebuffer, event mouse, resize dinamis, fullscreen, dan library widget
    • Custom HTML to Widgets belum selesai
  • Network stack telah menyelesaikan Ethernet, IP, ARP, UDP, Socket API, interface loopback, DHCP, DNS, TCP, dan perintah bergaya netcat
    • Webserver, FTP, IRC, SSH, Telnet, HTTP, dan HTML belum selesai
  • Aplikasi dan tool mencakup terminal, window server, informasi proses, Finder, compiler C/interpreter bytecode, VM kustom untuk menjalankan bytecode, editor dengan penyorotan sintaks, kalkulator, game 3D, game Snake mode teks, terminal virtual jarak jauh TCP, dan library kompresi LZ
  • Daftar lengkap fitur yang diusulkan dan issue yang diketahui tersedia di open issues

Lisensi dan tautan proyek

1 komentar

 
GN⁺ 2025-04-27
Komentar Hacker News
  • Proyek seperti ini jauh lebih enak dilihat daripada AI yang membosankan. Mungkin bukan sesuatu yang bisa dijual, tetapi ini menunjukkan seorang teknisi mengekspresikan keterampilannya secara kreatif.
    Saat akhir remaja, saya banyak mempelajari pengembangan OS hobi dan itu benar-benar keren; sampai sekarang pun kadang saya membuat kernel kecil. Terakhir yang saya buat adalah kernel kecil RISC-V yang menampilkan pesan untuk pasangan saya.

    • Rasanya benar-benar membebaskan karena tidak perlu memikirkan penjualan atau pemasaran. Kita cukup menemukan kembali roda sampai muncul ide baru.
    • Aneh rasanya menyebut AI secara keseluruhan sebagai “membosankan”. Sebelum dikemas menjadi pengalaman pengguna yang cerdas, AI lebih mirip eksplorasi akademis yang hampir tidak menghasilkan uang, semacam kerja kriya.
    • Kedengarannya seperti mengatakan bahwa perangkat hobi kecil jauh lebih menarik daripada teknologi paling tidak masuk akal dalam sejarah manusia.
  • Saya berharap font sistem default punya varian yang lebih sempit. Dengan begitu sistem akan terlihat jauh lebih rapi, dan tampaknya ada cukup banyak bagian yang butuh lebih banyak ruang horizontal untuk teks.
    Lebar tiap karakter perlu dikurangi, dan jarak antarkarakter juga dipersempit sebisa mungkin. Dengan ukuran font dan resolusi yang dipakai sekarang, jarak 1 piksel tampaknya sudah cukup.
    Saya tidak terlalu paham sistem font, tetapi saya berasumsi ini font bitmap monospace. Kalau terlalu sulit diubah di codebase, abaikan saja.
    Saya juga sudah beberapa waktu membuat situs OS web dari nol, dan baru-baru ini menulis ulang seluruh kelas font, jadi bagian ini sangat menarik perhatian saya.

    • Saya setuju font saat ini cukup jauh dari optimal. Saya masih memakai hampir apa adanya font awal yang pertama kali berhasil berjalan saat mulai.
      Saya juga sudah melihat rendering font yang lebih layak dan itu ada di daftar tugas, tetapi terus saya tunda.
    • Vibes-nya keras sekali.
      “Saya membuat sistem operasi!”
      “Hmm, font-nya kurang bagus.”
      Rasanya ini puncak HN.
  • Keren. Saya penasaran, kalau hari ini mulai lagi, apa yang akan Anda lakukan secara berbeda?
    Saya juga penasaran bahasa apa yang menurut Anda cocok untuk bagian low-level. Apakah tetap memakai C, memakai subset C++ yang sederhana, atau mempertimbangkan bahasa yang lebih baru.
    Materinya sangat banyak, jadi saya juga penasaran bagaimana Anda menjaga proyek tetap menarik alih-alih sekadar menyalin kode orang lain.

    • Hal terbesar yang akan saya lakukan berbeda adalah membuat rencana. Awalnya tujuan saya hanya membuat OS hello world dasar, tetapi saya terus menambahkan fitur baru dan mengerjakan banyak hal sekaligus, sehingga muncul utang teknis yang masih saya bayar sampai sekarang.
      Saya juga mungkin akan mencoba mengurangi ketergantungan pada UNIX.
      Untuk bahasa, saya suka C karena sintaks dasarnya dan gayanya yang langsung ke inti. Untuk aplikasi user space, saya bisa mempertimbangkan bahasa lain.
      Saya ingin menulis semuanya sendiri sejak awal, dan tidak mem-porting perangkat lunak adalah inti proyek ini. Secara umum saya berpegang pada aturan “salin idenya, bukan kodenya”.
  • Dari sudut pandang seseorang yang memakai Commodore PET 2001 pada 1977, ini benar-benar keren. Saya sempat mencoba KolibriOS dan MenuetOSx64, dan jadi ingin membuat OS sendiri. Hebat sekali Anda berhasil melakukannya.

  • Proyek ini benar-benar mengesankan, dan saya ingin memberi selamat. Sejak remaja saya menyukai pengembangan OS, dan senang melihat pencapaian seperti ini benar-benar terwujud.
    Saya juga sedikit penasaran bagaimana subsistem grafis diinisialisasi. Semoga sukses.

  • Saya juga berharap bisa meluangkan waktu untuk proyek passion seperti ini.
    Lupakan kegunaan praktis, lupakan strategi masuk pasar, lupakan kecocokan dengan target market; cukup membuat sesuatu dan belajar.

    • Rasanya benar-benar menyegarkan karena tidak perlu memikirkan apakah ini akan “dipakai” atau memikirkan pasar. Ini murni untuk kesenangan dan pembelajaran.
    • Saya penasaran kenapa Anda tidak bisa meluangkan waktu. Sejak kecil, rasanya saya akan cukup kehilangan arah tanpa proyek hobi.
      Salah satunya adalah OS mainan, tetapi proyek itu berhenti ketika pengembangan OS low-level menjadi pekerjaan sungguhan saya.
  • Saya sudah puluhan tahun di bidang ini dan sedang mencoba belajar pengembangan OS. Saya cukup mengenal FASM, NASM, dan FASM-G.
    Namun saya ingin mempelajari output program assembler untuk memahami bagaimana OS benar-benar bekerja di level biner.
    Saya penasaran apakah Anda mempelajari kode instruksi untuk arsitektur tertentu, bagaimana Anda menangani program driver perangkat, dan apakah Anda bisa merangkum tahapan mengembangkan OS sendiri.

    • Menurut saya tempat terbaik untuk belajar adalah forum osdev dan wiki osdev. Ada sangat banyak materi yang berguna untuk memulai.
      Ada juga beberapa tutorial, tetapi sering kali mengandung bug dan pada akhirnya mudah berubah menjadi sekadar membuat ulang OS mereka.
      Saya tidak menggali kode instruksi sedalam itu; saya hanya mencarinya saat membuat compiler C, jadi saya hanya tahu instruksi dasar yang paling umum.
      https://forum.osdev.org/
      https://wiki.osdev.org/Expanded_Main_Page
  • Benar-benar keren. Saya berharap lebih banyak semangat komputasi awal kembali, ketika orang lebih banyak mengutak-atik komputer itu sendiri daripada hanya level aplikasi.
    Saya sempat berpikir untuk membuat komputer pribadi sebagai proyek hobi jangka panjang. Komputer yang seluruh software stack-nya dibuat sendiri, dan saya tahu asal setiap bit yang masuk ke sistem.
    Untuk hardware, kecuali bisa mendapatkan performa yang cukup dengan FPGA untuk menjalankan semuanya, mungkin sulit mengontrolnya pada level yang sama, tetapi setidaknya software tampaknya memungkinkan.
    Sampai sekarang itu terasa tidak realistis, tetapi ini menunjukkan bahwa hal itu mungkin. Sepertinya ia juga sedang mengimplementasikan compiler C hobi: https://github.com/joexbayer/C-Compiler

    • Rasanya benar-benar menyenangkan mengetahui bahwa semuanya ditulis sendiri, dari bagian atas user space sampai driver. Pada saat yang sama, itu juga neraka debugging.
      Compiler C dibuat untuk OS ini dan berjalan di dalam OS. Proyeknya menjadi terlalu besar sehingga saya ingin memisahkannya dari repositori OS, terutama karena compiler itu juga berjalan di Linux.
  • Saya ingin mendengar penjelasan lebih lanjut tentang bagaimana compiler ini berinteraksi dengan sistem operasi. Terutama bagaimana fitur seperti struct ditangani, serta batasan saat ini dan perbaikan yang direncanakan di area ini.

    • Tidak ada interaksi ajaib antara compiler dan OS. Ia hanya mengompilasi ke kode mesin (i386) yang sama, dan memakai interrupt untuk system call.
      Struct diperlakukan sebagai area memori yang ukurannya ditentukan oleh member-nya, dan akses member ditangani sebagai offset di dalam area tersebut.
      Saat ini masih banyak batasan, seperti hanya ada int dan char, serta belum ada pernyataan switch. Perbedaan terbesar dari C standar adalah diizinkannya fungsi di dalam struct, dan jika itu fungsi struct, struct tersebut diteruskan secara implisit ke fungsi. Detail lebih lanjut bisa dilihat di sini:
      https://github.com/joexbayer/C-Compiler
  • Ini salah satu proyek passion paling mengesankan yang saya lihat di sini setelah cukup lama. Saya penasaran kenapa Anda memutuskan memakai compiler C buatan sendiri.

    • Saya punya aturan ingin menulis semuanya sendiri, dan membuat compiler juga selalu menjadi salah satu “target” saya. Jadi semuanya terasa cocok secara alami.