Chapter 39 — Path-Based Program Launching with /programs

Chapter 39 — Path-Based Program Launching with /programs
This entry is part 36 of 37 in the series Writing A Linux Style Operating System From Scratch

Before reading the shell examples in this chapter, be explicit about the prompt transition: toyix> is the kernel monitor. ush> is the user shell. So when this chapter shows commands like: those commands must be typed inside the user shell after toyix> run shell. Two other constraints still apply in this chapter: So cat README

Chapter 38 — Turning /programs into a Real Directory

Chapter 38 — Turning /programs into a Real Directory
This entry is part 35 of 37 in the series Writing A Linux Style Operating System From Scratch

Before reading the shell examples in this chapter, be explicit about the prompt transition: toyix> is the kernel monitor. ush> is the user shell. So when this chapter shows commands like: those commands must be typed inside the user shell after toyix> run shell. In Chapter 37, Toyix gained its first real directory support at

Chapter 37 — Directories, SYS_READDIR, and ls

Chapter 37 — Directories, SYS_READDIR, and ls
This entry is part 34 of 37 in the series Writing A Linux Style Operating System From Scratch

In Chapter 36, Toyix gained file metadata: The shell could now do: Now we are ready for the next filesystem milestone: This chapter adds: After this chapter: For compatibility with the previous chapters, /programs will remain a regular text file for now: The root directory / becomes the first actual directory. 1. What this chapter

Chapter 36.5 – A Testing Detour and a Real Smoke Harness

Chapter 36.5 – A Testing Detour and a Real Smoke Harness
This entry is part 33 of 37 in the series Writing A Linux Style Operating System From Scratch

Chapter 36 added SYS_STAT, which was the right filesystem step. But it also exposed a testing problem that has been growing for a while. Right now, Toyix testing is split across three awkward places: That worked while the system was small. It does not scale well now that Toyix has: The biggest smell is that

Chapter 35 — SYS_SEEK and Rewindable File Descriptors

Chapter 35 — SYS_SEEK and Rewindable File Descriptors
This entry is part 32 of 37 in the series Writing A Linux Style Operating System From Scratch

In Chapter 34, Toyix gained its first tiny file layer: The shell could now do: But file descriptors were strictly forward-only. Once a file was read, its offset moved forward. There was no way to rewind, skip, or query position. This chapter adds: After this chapter, userland can do: And the shell gains a small

Chapter 34 — First RAMFS and Core File APIs

Chapter 34 — First RAMFS and Core File APIs
This entry is part 31 of 37 in the series Writing A Linux Style Operating System From Scratch

By the end of Chapter 33, Toyix could launch child processes, inspect child state from the shell, and request cooperative termination: At this point, Toyix can: The next major subsystem is files. This chapter adds the first tiny filesystem path: After this chapter, the user shell can do: This is not a disk filesystem yet.

Chapter 33 — Process Termination and Kill Checks

Chapter 33 — Process Termination and Kill Checks
This entry is part 30 of 37 in the series Writing A Linux Style Operating System From Scratch

By the end of Chapter 32, Toyix could launch child processes, wait for them, and keep exited children around as zombies until the parent collected them. For this chapter, we also extend the shell and syscall ABI just enough to inspect child state from user mode: That gives the shell basic process ownership and job-state

Chapter 32 — Process Ownership, Waiting, and Job State

Chapter 32 — Process Ownership, Waiting, and Job State
This entry is part 29 of 37 in the series Writing A Linux Style Operating System From Scratch

In Chapter 32, the user shell gained: That let a user process launch another user process: The flow worked: But the process model was too loose. Any process could wait for any PID. This chapter tightens that up. We will add: After this chapter, a child process belongs to the process that launched it: Then:

Chapter 31 — SYS_EXEC, SYS_WAITPID, and Shell-Launched Programs

Chapter 31 — SYS_EXEC, SYS_WAITPID, and Shell-Launched Programs
This entry is part 28 of 37 in the series Writing A Linux Style Operating System From Scratch

In Chapter 30, Toyix gained its first user-mode shell: But the shell could not launch programs yet. The kernel monitor could run programs: but the user shell could not. This chapter adds the first user-facing process-control syscalls: At first, SYS_EXEC still launches programs from the embedded program registry. We are not loading from a filesystem

Chapter 30 — First User-Mode Shell

Chapter 30 — First User-Mode Shell
This entry is part 27 of 37 in the series Writing A Linux Style Operating System From Scratch

In Chapter 29, we added the first shared userland runtime. This chapter extends that runtime with formatted output and shell-oriented helpers, then uses it to build the first real long-running user-mode program: This first shell will run entirely in ring 3. It will read lines from stdin, parse commands, and execute a few built-in commands.