Toaruos เป็นระบบปฏิบัติการ "สมบูรณ์" สำหรับพีซี x86-64 และการสนับสนุนการทดลองสำหรับ ARMV8
ในขณะที่อดิเรกอิสระและการวิจัยจำนวนมากมีจุดมุ่งหมายที่จะทดลองกับการออกแบบใหม่ Toaruos มีวัตถุประสงค์เพื่อเป็นทรัพยากรการศึกษาซึ่งเป็นตัวแทนของการทำงานที่พบในระบบปฏิบัติการเดสก์ท็อปที่สำคัญ
ระบบปฏิบัติการรวมถึงเคอร์เนล, bootloader, Linker Object ที่ใช้ร่วมกันแบบไดนามิก, ไลบรารีมาตรฐาน C, ระบบ Windowing Composited ของตัวเอง, ภาษาการเขียนโปรแกรมแบบไบต์แบบไดนามิกแบบไดนามิก, โปรแกรมแก้ไขรหัสขั้นสูงและแอพพลิเคชั่นอื่น ๆ อีกมากมายและแอปพลิเคชันตัวอย่าง
ไม่มีการพึ่งพารันไทม์ภายนอกและซอร์สโค้ดที่จำเป็นทั้งหมดรวมทั้งสิ้นประมาณ 100k บรรทัดของ (ส่วนใหญ่) C รวมอยู่ในที่เก็บนี้ประหยัดสำหรับ Kuroko ซึ่งมีชีวิตแยกกัน
การสาธิต UI ของ Toaruos และแอปพลิเคชันบางอย่าง
ฉันทำงานกับ Toaruos มานานกว่าทศวรรษแล้วและเป้าหมายของฉันเปลี่ยนไปในช่วงหลายปีที่ผ่านมา
เมื่อฉันเริ่มโครงการครั้งแรกในเดือนธันวาคม 2010 เป้าหมายของฉันคือ "เรียนรู้ด้วยการทำ" - การศึกษาระบบเหมือน UNIX โดยการทำจากศูนย์ ฉันเป็นผู้มีส่วนร่วมในการ Compiz ซึ่งเป็นหนึ่งในผู้จัดการหน้าต่าง Compositing ที่ใช้กันอย่างแพร่หลายในเรื่อง X11 เมื่อไม่กี่ปีก่อนและ Toaruos ค่อนข้างตามธรรมชาติได้รับ GUI ที่สร้างขึ้นบนแนวคิดที่คล้ายกันในช่วงต้น
สำหรับการเปิดตัว 1.0 ดั้งเดิมในปี 2558 Toaruos ไม่ได้เป็นระบบปฏิบัติการที่ "สมบูรณ์จากศูนย์" Newlib จัดหา LIBC และ GUI ถูกสร้างขึ้นบนกรุงไคโร, libpng และ Freetype ในช่วงกลางปี 2561 ฉันเริ่มโครงการใหม่เพื่อแทนที่ส่วนประกอบของบุคคลที่สามเหล่านี้ซึ่งในที่สุดก็เสร็จสมบูรณ์และรวมเข้าด้วยกันเป็น Toaruos 1.6
Toaruos ได้ดึงดูดนักพัฒนาระบบปฏิบัติการเริ่มต้นไม่กี่คนที่พยายามใช้เป็นข้อมูลอ้างอิง อย่างไรก็ตามเคอร์เนลของ Toaruos เป็นแหล่งที่มาของความอับอายส่วนตัวสำหรับฉันและในเดือนเมษายน 2564 หลังจากที่หายไปนานฉันเริ่มทำงานใหม่ ผลที่ได้คือ Misaka: เคอร์เนล 64 บิตใหม่ที่เปิดใช้งาน SMP Misaka ถูกรวมเข้าด้วยกันในเดือนพฤษภาคมและเริ่มต้นการเปิดตัวเบต้า 1.99 ชุดที่นำไปสู่ Toaruos 2.0
dlopenโครงการต่อไปนี้กำลังดำเนินการอยู่:
ผู้ใช้ทั่วไปหวังที่จะสร้าง Toaruos จากแหล่งที่มาจะเรียกใช้ที่เก็บข้อมูลใน GitHub และใช้ประโยชน์จากท่อส่ง GitHub CI
สำหรับผู้ที่ต้องการสร้างท้องถิ่นบนโฮสต์ Linux ที่กำหนดค่าไว้อย่างเหมาะสมด้วย Docker จะมีคอนเทนเนอร์สร้าง ควรใช้ที่เก็บ Toaruos เป็นตัวยึดติด AT /root/misaka และ util/build-in-docker.sh สามารถเรียกใช้ภายในคอนเทนเนอร์นี้เพื่อให้กระบวนการรวบรวมเสร็จสมบูรณ์:
git clone https://github.com/klange/toaruos
cd toaruos
git submodule update --init kuroko
docker pull toaruos/build-tools:1.99.x
docker run -v `pwd`:/root/misaka -w /root/misaka -e LANG=C.UTF-8 -t toaruos/build-tools:1.99.x util/build-in-docker.sh
หลังจากสร้างเช่นนี้คุณสามารถเรียกใช้เป้าหมายยูทิลิตี้ต่าง ๆ ( make run ฯลฯ ) ลอง make shell เพื่อเรียกใช้เชลล์ Toaruos โดยใช้พอร์ตอนุกรมกับ QEMU
Makefile ใช้เครื่องมือ kuroko, auto-dep.krk เพื่อสร้าง makefiles เพิ่มเติมสำหรับแอปพลิเคชันและไลบรารีผู้ใช้พื้นที่โดยอัตโนมัติโดยอัตโนมัติโดยอัตโนมัติตามคำสั่ง #include
ในลำดับที่ไม่แน่นอนห้องสมุด C เคอร์เนลผู้ใช้งาน Librares และแอปพลิเคชันถูกสร้างขึ้นรวมกันเป็นคลังเก็บที่ถูกบีบอัดเพื่อใช้เป็น Ramdisk จากนั้นบรรจุลงในภาพระบบไฟล์ ISO9660
base/usr/include รวมถึงทรัพยากรกราฟิกสำหรับนักแต่งเพลงและมัณฑนากรหน้าต่างระบบไฟล์รูทถูกตั้งค่าดังนี้:
bin : แอปพลิเคชันของบุคคลแรกcdrom : Mount Point สำหรับ CD ถ้ามีdev : ไดเรกทอรีอุปกรณ์เสมือนจริงที่สร้างโดยเคอร์เนลnet : อุปกรณ์อินเทอร์เฟซเครือข่ายpex : Packet Exchange Hub, รายการบริการ IPC ที่เข้าถึงได้pts : Pty Secondaries, จุดสิ้นสุดสำหรับ ttysetc : ไฟล์การกำหนดค่าสคริปต์เริ่มต้นhome : ไดเรกทอรีผู้ใช้lib : ห้องสมุดบุคคลแรกkuroko : โมดูล Kurokomod : โมดูลเคอร์เนลที่โหลดได้proc : ไฟล์เสมือนจริงที่นำเสนอสถานะเคอร์เนล1 , ฯลฯ : ไฟล์เสมือนจริงที่มีข้อมูลสถานะสำหรับแต่ละกระบวนการsrc : ไฟล์ต้นฉบับดูส่วน "เค้าโครงโครงการ" ด้านบนtmp : ติดตั้งเป็น TMPFs อ่าน/เขียนตามปกติusr : แหล่งข้อมูลผู้ใช้พื้นที่bin : แอปพลิเคชันของบุคคลที่สามโดยปกติจะว่างเปล่าจนกว่าจะติดตั้งแพ็คเกจinclude : ไฟล์ส่วนหัวรวมถึงไฟล์ที่อาจเกิดขึ้นจากแพ็คเกจบุคคลที่สามlib : ห้องสมุดบุคคลที่สาม ควรมี libgcc_s.so โดยค่าเริ่มต้นshare : ทรัพยากรต่าง ๆbim : การเน้นไวยากรณ์และธีมสำหรับตัวแก้ไขข้อความcursor : สไปรต์เคอร์เซอร์เมาส์fonts : ไฟล์อักษร Truetype Live CDS Ship กับ Deja Vu Sansgames : การทิ้งสนามสำหรับไฟล์ทรัพยากรที่เกี่ยวข้องกับเกมเช่น Doom Wadshelp : ไฟล์เอกสารสำหรับแอปพลิเคชันเบราว์เซอร์ช่วยเหลือicons : ไอคอน PNG แบ่งออกเป็นไดเรกทอรีเพิ่มเติมตามขนาดttk : แหล่งข้อมูล Spritesheet สำหรับมัณฑนากร Window และห้องสมุดวิดเจ็ตwallpapers : วอลเปเปอร์ JPEGvar : ไฟล์รันไทม์รวมถึงแคช Manifest Package Manager, ไฟล์ PID, ไฟล์ล็อคบางไฟล์ ฯลฯ ประสบการณ์ผู้ใช้ปลายทางที่ดีที่สุดกับ Toaruos จะมีในเครื่องเสมือนจริงเหล่านี้เนื่องจาก Toaruos มีการสนับสนุนการปรับขนาดการแสดงผลอัตโนมัติและการวางตำแหน่งเมาส์แบบสัมบูรณ์
ตั้งค่า VM ใหม่สำหรับแขกรับเชิญ 64 บิต "อื่น ๆ " จัดหา RAM อย่างน้อย 1Gib แนบภาพซีดีลบหรือละเว้นฮาร์ดดิสก์ใด ๆ และเลือก Intel Gigabit NIC แนะนำให้ใช้ซีพียูสองตัวขึ้นไปเช่นกัน
Toaruos ทำงานใน VirtualBox
Toaruos ทำงานใน VMware Workstation Player
โดยค่าเริ่มต้น bootloader จะส่งธงไปยังไดรเวอร์อุปกรณ์ VirtualBox เพื่อปิดการสนับสนุน "ไร้รอยต่อ" เนื่องจากการใช้งานมีค่าใช้จ่ายด้านประสิทธิภาพ ในการเปิดใช้งานโหมดไร้รอยต่อให้ใช้เมนู bootloader เพื่อตรวจสอบตัวเลือก "VirtualBox ที่ไร้รอยต่อ" ก่อนบูต เมนูยังมีตัวเลือกในการปิดใช้งานการแสดงผลการแสดงผลแขกอัตโนมัติหากคุณพบปัญหาเกี่ยวกับคุณสมบัตินี้
การพัฒนา Toaruos ส่วนใหญ่เกิดขึ้นใน QEMU เนื่องจากให้ความยืดหยุ่นมากที่สุดในฮาร์ดแวร์และประสบการณ์การดีบักที่ดีที่สุด บรรทัดคำสั่ง QEMU ที่แนะนำในโฮสต์ Ubuntu 20.04 คือ:
qemu-system-x86_64 -enable-kvm -m 1G -device AC97 -cdrom image.iso -smp 2
แทนที่ -enable-kvm ด้วย -accel hvm หรือ -accel haxm ตามความเหมาะสมบนแพลตฟอร์มโฮสต์ที่ไม่มี KVM หรือลบออกเพื่อลองภายใต้การจำลองซอฟต์แวร์ TCG ของ QEMU
โปรดทราบว่าตัวเลือกบรรทัดคำสั่ง QEMU ไม่เสถียรและธงเหล่านี้อาจสร้างคำเตือนในเวอร์ชันใหม่
ตัวเลือก -M q35 จะแทนที่การจำลองชิปเซ็ต PIIX ด้วยใหม่ซึ่งมีผลข้างเคียงของการสลับคอนโทรลเลอร์ IDE สำหรับ SATA หนึ่ง สิ่งนี้อาจส่งผลให้เวลาบูตเร็วขึ้นด้วยค่าใช้จ่ายของ Toaruos ที่ไม่สามารถอ่านซีดีของตัวเองได้ที่รันไทม์จนกว่าฉันจะไปรอบ ๆ เพื่อทำไดรเวอร์ AHCI ของฉันให้เสร็จ
Toaruos ได้รับการทดสอบอย่างประสบความสำเร็จกับฮาร์ดแวร์จริง หาก BIOS ดั้งเดิมหรือ Loaders EFI ไม่สามารถใช้งานได้ให้ลองบูตด้วยด้วง Toaruos สอดคล้องกับสเป็ค "Multiboot" และ "Multiboot 2" ดังนั้นจึงอาจโหลดด้วยคำสั่ง multiboot หรือ multiboot2 ดังนี้:
multiboot2 /path/to/misaka-kernel root=/dev/ram0 migrate vid=auto start=live-session
module2 /path/to/ramdisk.igz
set gfxpayload=keep
Toaruos ทำงานได้อย่างเป็นทางการจากแท่ง USB บน ThinkPad T410
ทุกส่วนของบุคคลแรกของ Toaruos มีให้ภายใต้เงื่อนไขของใบอนุญาตมหาวิทยาลัยอิลลินอยส์ / NCSA ซึ่งเป็นใบอนุญาตอนุญาตสไตล์ BSD เว้นแต่จะระบุไว้เป็นอย่างอื่นนี่เป็นใบอนุญาตดั้งเดิมและเพียงใบอนุญาตสำหรับไฟล์ทั้งหมดในที่เก็บนี้ - เพียงเพราะไฟล์ไม่มีส่วนหัวลิขสิทธิ์ไม่ได้หมายความว่ามันไม่ได้อยู่ภายใต้ใบอนุญาตนี้ Toaruos มีวัตถุประสงค์เพื่อเป็นข้อมูลอ้างอิงทางการศึกษาและฉันขอแนะนำให้ใช้รหัสของฉัน แต่โปรดตรวจสอบให้แน่ใจว่าคุณปฏิบัติตามข้อกำหนดของใบอนุญาต คุณสามารถแจกจ่ายรหัสใหม่ภายใต้ใบอนุญาต NCSA รวมถึงการปรับเปลี่ยนรหัสและ sublicense ภายใต้ข้อกำหนดอื่น ๆ (เช่น GPL หรือใบอนุญาตที่เป็นกรรมสิทธิ์) แต่คุณต้องรวมประกาศลิขสิทธิ์ที่ระบุไว้ในใบอนุญาตรวมถึงการทำข้อความทั้งหมดของใบอนุญาต
ในขณะที่ Toaruos ส่วนใหญ่เขียนด้วยตัวเองให้แน่ใจว่าได้รวมผู้เขียนคนอื่น ๆ ที่เกี่ยวข้องเช่นระบบย่อยเสียงของ Mike หรือฟังก์ชั่นสตริงของ Dale
องค์ประกอบบางอย่างของ Toaruos เช่น Kuroko หรือ BIM มีเงื่อนไขที่แตกต่างกัน แต่เข้ากันได้
Toaruos สะท้อนให้เห็นถึงไซต์โฮสติ้ง Git หลายแห่งเป็นประจำ
#toaruos on Libera ( irc.libera.chat )
แอปพลิเคชันและไลบรารีส่วนบุคคลสามารถสร้างได้โดยการติดตั้ง metapackage build-essential จากที่เก็บซึ่งจะดึงใน gcc และ binutils แหล่งข้อมูลมีอยู่ในไดเรกทอรี /src บนซีดีสดในรูปแบบที่คล้ายกันกับที่เก็บนี้และสคริปต์ยูทิลิตี้ auto-dep.krk ก็พร้อมใช้งาน
สำหรับการสร้าง ramdisks, เมล็ดสรุปหรือภาพซีดีส่วนประกอบบางส่วนไม่สามารถใช้งานได้ในขณะนี้ โดยเฉพาะอย่างยิ่งสคริปต์การสร้างสำหรับ ramdisks ยังคงเขียนใน Python และขึ้นอยู่กับโมดูล tarfile และการสนับสนุน zlib ก่อนหน้านี้ด้วยเครื่องมือคอมไพเลอร์ที่มีความสามารถ Toaruos 1.x สามารถสร้างเคอร์เนลของตัวเองผู้ใช้พื้นที่ไลบรารีและ bootloader และเปลี่ยนสิ่งเหล่านี้ให้เป็นภาพซีดี ISO ที่ใช้งานได้ผ่านสคริปต์ Python ที่ทำหน้าที่คล้ายกับ makefile
Toaruos ไม่สามารถสร้างพอร์ตส่วนใหญ่ได้เนื่องจากขาดเชลล์ Posix ที่เหมาะสมและทำการดำเนินการ นี่คือเป้าหมายในที่สุดของโครงการ
ไม่ไม่เลย ไม่มีรหัสจาก Linux ทุกที่ใน Toaruos และไม่ได้ใช้แหล่งข้อมูล Linux ที่ใช้เป็นวัสดุอ้างอิง
Toaruos เป็นโครงการที่เป็นอิสระอย่างสมบูรณ์และรหัสทั้งหมดในที่เก็บนี้ - ซึ่งเป็นรหัสฐานปฏิบัติการทั้งหมดของระบบปฏิบัติการรวมถึงเคอร์เนล, bootloaders, ห้องสมุดและแอปพลิเคชัน - เป็นต้นฉบับเขียนด้วยตัวเองและผู้มีส่วนร่วมจำนวนหนึ่งในช่วงสิบปีที่ผ่านมา ประวัติแหล่งที่มาที่สมบูรณ์กลับไปที่เมื่อ Toaruos ไม่มีอะไรมากไปกว่า "Hello World" Baremetal สามารถติดตามได้ผ่านที่เก็บ Git นี้
Toaruos เสร็จสมบูรณ์ในแง่ที่ว่ามันครอบคลุมฟังก์ชันการทำงานทั้งหมดสำหรับระบบปฏิบัติการ: ไม่ใช่ "แค่เคอร์เนล" หรือ "แค่ผู้ใช้พื้นที่"
Toaruos ไม่ สมบูรณ์ในแง่ของการ "เสร็จสิ้น"
ในขณะที่ฉันตั้งเป้าหมายที่จะสนับสนุนอินเทอร์เฟซ POSIX ได้ดีพอสำหรับซอฟต์แวร์ที่จะพอร์ตการใช้งานอย่างเข้มงวดของมาตรฐานไม่ได้เป็นเป้าหมายสำคัญของระบบปฏิบัติการและการปฏิบัติตามอย่างเต็มรูปแบบอาจไม่เป็นที่พึงปรารถนา
Toaruos เป็นโครงการส่วนบุคคลไม่ใช่โครงการชุมชน การมีส่วนร่วมในรูปแบบของรหัสควรมีการหารือล่วงหน้า พอร์ตและงานอื่น ๆ นอก repo เป็นวิธีที่ดีในการช่วยเหลือ
นอกจากนี้คุณยังสามารถช่วยได้โดยการมีส่วนร่วมกับ Kuroko - ซึ่งเป็นส่วนหนึ่งของสาเหตุที่ทำให้เป็นที่เก็บแยกต่างหาก