Day 100 is here, so let's talk. I guess we begin with what this OS has to offer as of now. This isn't really a documentation of the whole thing, but it's everything notable. You can boot into a graphical environment, first beginning with debug boot tests (to be removed once completed) with a progress bar, and then loading the Window Manager. You can open, drag, resize, and maximize windows. You can open the File Explorer apps and the Ram Disk app to get access to a real Fat32 VFS implementation that actually reads and writes to a disk, also including initrd. A full graphical file explorer is present, with breadcrumbs, navigation, lists, create, rename, delete, folders, text files, and a built in minimal text editor with save commands. There is a full-stack task manager, a 100Hz round-robin preemptive scheduler to switch tasks cleanly, safely boots the system into isolated Ring 3 User Mode. There's also proper task sleeping, process crash recovery, priority aging and sleeping, and shared memory. For networking, there's the terminal and ping utility, and it can ping to a specified host, and receive replies back. We also have a native hardware driver for the RTL8139 ethernet card, the core internet protocol suite (ARP, IPv4, UDP, TCP, and DHCP), and a DNS parser (almost a full network stack at this point). In terms of actual usage, you can make http and https requests to websites to download their html into the terminal. There is also a browser that can accept a url (for example, example.com, download the html, and actually render it onto a window). TLS 1.3 is supported. There is also a basic JavaScript engine and parser, as well as an almost-complete native Scratch SB3 runner with the sole process of loading Scratch Projects. In terms of hardware & system services, we have RTC, AHCI, USB Controllers, Battery/Shutdown/Reboot procedures, Screenshots, A full sound implementation (currently not working but I'll fix it soon), Clipboard, System Notifications, and screen brightness. There's also implementations for bluetooth, printers, and camera, but I haven't really tested that yet due to QEMU limitations. There's also 6 native apps: Clock, Calendar, Calculator, Text Editor, System Monitor, and Settings. Last but certainly not least, there's a DOOM port that barely works! Now the OS isn't perfect or anything. Not everything works literally perfectly, but it does indeed work, and reminder that this is a real OS that you can boot on something like VirtualBox and even a real computer. ------------------------- Now let's talk about the screenshot, and what's changed recently. For starters, as you may have noticed, yes, that's DOOM running in Scratch OS. This took like 20 days of debugging, but it's finally somewhat working. Another huge thing, notice anything different about the text? I was able to implement a full font system, currently using Segoe UI, but I can change it to anything I'd like. This makes things look drastically better. In the browser, you can see that the example.com rendering is near-perfect now. the background loads perfectly, font sizes, bolding, spacing, and etc. work perfectly, the font now looks great and overall a massive glowup from previous versions. In terms of UI, you can see that we have used png assets from the mockup Scratch OS in the taskbar, and the start menu has been revamped. The Scratch Runner, which should have ideally been in this screenshot, is currently facing some issues due to me trying to now load projects with forever loops. I hope to resolve this issue soon. ------------------------------------------- Now for the future. As of today, I'm done the 25% mark of this OS (Chapter 1-10). I already started with chapter 11 (Audio & Video Viewer), and I'm taking a new experimental strategy to speed things up, so hopefully that goes well. I build chapters 1-10 quite awfully and spent half of the hundred days fixing up the mess I made, but I promise I'll make 11-20 better.
https://scratch.mit.edu/projects/1308704772/ Full rewrite of my 6-year-old Scratch Operating System project in actual C/ASM now instead of on Scratch, check the above project's description for context