HN Rilis: OS hobi yang ditulis sendiri akhirnya berjalan di IBM ThinkPad vintage
(github.com/joexbayer)- 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
.isoke 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, danxxdjuga diperlukan
- MacOS:
- Di Linux, build dan menjalankan dilakukan berurutan dengan clone repositori,
./debian.sh, inisialisasi Git submodule,make compile,make img, lalumake 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
.imgsebagai hard disk image di copy.sh v86 - Menjalankan
make qemuatauqemu-system-i386 <image name>di QEMU - Di perangkat keras nyata, membakar file
.isoke USB atau CD dan menggunakan GRUB ISO
- Mengunggah file
Struktur proyek
- Struktur repositori dibagi menjadi direktori kernel, driver, grafis, jaringan, filesystem, library, aplikasi ruang pengguna, pengujian, dan tool
bootberisi bootloader kustom danmultiboot.ldkernelberisi sumber utama kernel, kode khusus arsitektur, dan kode thread kernelappsberisi aplikasi ruang pengguna sertalibcore.a,libgraphic.a, danlibnet.anetberisi kode networking, sedangkanfsberisi kode terkait filesystemtoolsmencakup 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/kfreekernel, sertamalloc/freeruang 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
- RetrOS-32 didistribusikan dengan MIT License
- Tautan proyek adalah https://github.com/joexbayer/RetrOS-32
1 komentar
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.
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 juga sudah melihat rendering font yang lebih layak dan itu ada di daftar tugas, tetapi terus saya tunda.
“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.
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.
https://github.com/joexbayer/RetrOS-32/blob/development/grap...
https://github.com/joexbayer/RetrOS-32/blob/development/grap...
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.
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.
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
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.
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.