Skip to content
This repository was archived by the owner on Sep 11, 2024. It is now read-only.

Commit abed6d3

Browse files
committed
Update README.md
1 parent 1914625 commit abed6d3

File tree

1 file changed

+56
-67
lines changed

1 file changed

+56
-67
lines changed

README.md

+56-67
Original file line numberDiff line numberDiff line change
@@ -1,110 +1,95 @@
11
# duckOS
2+
A hobby UNIX-like OS with a graphical window manager and applications for x86 PCs, with a [work-in-progress aarch64 port](https://github.com/byteduck/duckOS/pull/73).
23

34
![duckOS](https://github.com/byteduck/duckOS/workflows/duckOS/badge.svg)
45

5-
A hobby UNIX-like OS with a graphical window manager and applications for x86-based computers.
6+
![Screenshot](docs/screenshots/screenshot-2023-12-01.png)
67

7-
### Try duckOS
8+
[Demo](#try-duckos) | [Features](#features) | [Apps](#apps) | [Ports](#ports) | [How to Build](#building--running)
89

9-
A disk image of duckOS can be downloaded from the artifacts of the duckOS GitHub [workflow](https://github.com/byteduck/duckOS/actions/workflows/build-os.yml). This can then be virtualized or emulated using QEMU or your software of choice.
10+
## On Hold
1011

11-
Alternatively, thanks to the [v86 project](https://github.com/copy/v86) by [copy](https://copy.sh), you can try a version of duckOS in your browser. This is a lot slower running it locally, and the build will usually be a bit out-of-date. You can try it [here](https://aaron.sonin.me/duckOS)!
12+
Due to my professional obligations, development of duckOS is currently on hold. Feel free to fork it and mess around with it though!
1213

13-
### Screenshots
14-
![Screenshot](docs/screenshots/screenshot-2023-12-01.png)
14+
## Try duckOS
15+
16+
### Virtualize locally
17+
A recent release can be downloaded from the [releases](https://github.com/byteduck/duckOS/releases) page. Alternatively, a disk image of the latest duckOS can be downloaded from the artifacts of the duckOS GitHub [workflow](https://github.com/byteduck/duckOS/actions/workflows/build-os.yml). This can then be virtualized or emulated using QEMU or your software of choice.
1518

16-
### What's working
17-
- Booting off of the primary master IDE (PATA) hard drive on both emulators and real hardware (tested on a Dell Optiplex 320 with a Pentium D)
18-
- PATA DMA or PIO access (force PIO by using the `use_pio` grub kernel argument)
19-
- A virtual filesystem with device files (`/dev/hda`, `/dev/zero`, `/dev/random`, `/dev/fb`, `/dev/tty`, etc)
20-
- The root filesystem is ext2, and is writeable
21-
- Disk caching
22-
- Dynamic linking with shared libraries
23-
- A Bochs/Qemu/VirtualBox/Multiboot video driver (640x480x32bpp)
24-
- A window manager / compositor called pond
25-
- Various GUI applications
26-
- Ports of binutils and gcc
27-
- More!
28-
29-
### Future plans
30-
#### Stuff that may happen soon™.
31-
- ~~Revamp virtual memory system so it's not as error-prone and easier to debug (named regions, fix race conditions, faster allocation, etc.)~~ **Done!**
32-
- Revamp kernel IPC system to be more efficient (Replace SocketFS with something like Mach or MINIX's grant-based IPC)
19+
### Emulate in the browser
20+
Alternatively, thanks to the [v86 project by copy](https://github.com/copy/v86), you can try a version of duckOS in your browser. _**This is a lot slower running it locally, and does not have copies of ported software like DOOM**_. [You can try it here!](https://aaron.sonin.me/duckOS)
21+
22+
## Features
23+
- A window manager / compositor plus a themable view-based UI toolkit for creating apps
24+
- A basic TCP/UDP over IP networking stack with unix sockets and an E1000 ethernet driver
25+
- Sound support for AC97 sound cards
26+
- Many ports of programs like DOOM, utilities like GCC, and libraries like SDL
27+
- Dynamic linking and loading of binaries
28+
- On-board debugging capabilities like ptrace and a sampling profiler
29+
- A software 3D rendering library
30+
- Runs on some real hardware
31+
- A WIP aarch64 port that [boots past stage 1](https://github.com/byteduck/duckOS/pull/73#issuecomment-2270315545) on a raspberry pi 3b :)
32+
33+
## Future plans
34+
- Finish aarch64 port
35+
- Revamp kernel IPC system to be more efficient
3336
- Better font rendering (Vector fonts, different sizes, etc.)
34-
- ~~Finish porting GCC~~, self-host
37+
- self-host
3538
- More s t a b i l i t y and s p e e d
3639
- A better filesystem cache implementation that can free memory when needed and periodically flushes writes
3740
- More kernel & userspace unit tests
3841
- Better documentation of kernel, libraries, and applications
3942
- Some more kernel & userspace debugging tools so I don't have to spend hours knee-deep in the qemu debugger whenever a segfault happens due to a simple bug that could've been avoided with some extra coffee in my system
40-
41-
### Lofty goals
42-
#### Maybe someday.
4343
- Multiprocessor (multicore) support
44-
- x64 / ARM support (?)
45-
- Slowly transition various modules from the kernel to userspace (ie microkernel)
44+
- Slowly transition various modules from the kernel to userspace (a la microkernel)
4645
- Add Rust into the mix (?)
47-
- Network support
48-
49-
### Services
46+
47+
## Services
5048

5149
The code for these can be found in [services](services/).
5250

5351
- Init (/bin/init): The init system for duckOS.
5452
- Pond (/bin/pond): The window manager / compositor for duckOS.
5553
- Quack (/bin/quack): The sound server for duckOS.
54+
- DHCP Client (/bin/dhcpclient): A DHCP client for assigning an IP address.
5655

57-
### GUI Programs
56+
## Apps
5857

59-
The code for these can be found in [programs](/programs)
58+
The code for these can be found in [programs/applications](/programs/applications).
6059

6160
- Calculator (/apps/calculator.app): A basic calculator.
6261
- Terminal (/apps/terminal.app): A libui-based terminal application.
6362
- System Monitor (/apps/monitor.app): A basic system monitor showing memory and CPU utilization.
6463
- 4 In a Row (/apps/4inarow.app): A basic four-in-a-row game. Play with two players or against the computer.
6564
- Sandbar (/bin/sandbar): A basic "taskbar" that displays a row of buttons at the bottom of the screen to launch applications.
6665
- Files (/apps/files.app): A rudimentary file explorer application.
67-
- Viewer (apps/viewer.app): A basic image viewer.
66+
- Viewer (apps/viewer.app): A basic media viewer that can view images and play sound files
6867
- Lib3d Demo (apps/3demo.app): A demo for the lib3d library. Displays a cube by default; can be used to view obj files.
69-
- Editor (/apps/editor.app): A basic app to edit text files.
70-
71-
### CLI Programs
72-
73-
The code for these can be found in [programs](programs/).
74-
75-
- ls (/bin/ls): Lists the entries in the current or given directory.
76-
- cat (/bin/cat): Writes the contents of a file to stdout.
77-
- cp (/bin/cp): Copies a file.
78-
- mv (/bin/mv): Moves a file.
79-
- pwd (/bin/pwd): Prints the current working directory.
80-
- mkdir (/bin/mkdir): Creates a new directory.
81-
- echo (/bin/echo): Prints the arguments given to it separated by spaces to stdout.
82-
- rm (/bin/rm): Removes a file.
83-
- ln (/bin/ln): Creates a hard or symbolic link to a file or directory.
84-
- rmdir (/bin/rmdir): Removes a directory.
85-
- touch (/bin/touch): Updates the access/modification times of a file or creates it if it doesn't exist.
86-
- truncate (/bin/truncate): Resizes a file.
87-
- chmod (/bin/chmod): Changes the mode of a file.
88-
- chown (/bin/chown): Changes the owner of a file.
89-
- free (/bin/free): Shows the amount of total, used, and free memory (use the -h flag for human-readable numbers).
90-
- ps (/bin/ps): Shows the currently running processes.
91-
- dsh (/bin/dsh): A basic userspace shell with support for pipes (`|`) and redirections (`>`/`>>`).
92-
- There is only support for one redirection at a time right now.
93-
- open (/bin/open): A utility to open files and applications from the command line.
68+
- Editor (/apps/editor.app): A basic app to edit text files.
69+
- About (/apps/about.app): Shows some system information.
70+
71+
## CLI Programs
72+
73+
The code for these can be found in [programs/coreutils](programs/coreutils). Alongside the usual suspects, duckOS has:
74+
75+
- dsh (/bin/dsh): A basic shell with support for piping, redirections, and command recall.
76+
- open (/bin/open): A utility to open files and applications from the command line using the appropriate program.
9477
- play (/bin/play): Plays audio files.
95-
- profile (/bin/profile): Profiles a running application and outputs a [FlameGraph](https://github.com/brendangregg/FlameGraph) / [SpeedScope](https://speedscope.app) compatible file.
78+
- date (/bin/date): Shows the date and time.
79+
- profile (/bin/profile): Profiles a running application and outputs a [FlameGraph](https://github.com/brendangregg/FlameGraph) / [SpeedScope](https://speedscope.app) compatible file.
9680
- You can run `scripts/debugd.py` on the host (with speedscope installed) and pass the `-r` parameter to profile to send the output directly to the host via networking and open it in speedscope.
9781

9882
Programs that take arguments will provide you with the correct usage when you run them without arguments.
9983

10084

101-
### Libraries
85+
## Libraries
10286

10387
- [libc](libraries/libc): The standard C library.
10488
- [libm](libraries/libm): The math portion of the standard C library.
10589
- [libpond](libraries/libpond): The library used for interfacing with the pond window manager / compositor.
10690
- [libgraphics](libraries/libgraphics): A library which provides a few utilities for working with graphics such as image format loading.
10791
- [libui](/libraries/libui): A UI framework for applications.
92+
- [libtui](/libraries/libtui): A framework for terminal applications.
10893
- [libterm](/libraries/libterm): A framework for handling terminals.
10994
- [libduck](/libraries/libduck): A library containing commonly used classes and utilities, such as argument and configuration file parsing.
11095
- [libriver](/libraries/libriver): An IPC library not dissimilar to D-Bus, which provides a framework for remote function calls and data passing.
@@ -116,24 +101,28 @@ Programs that take arguments will provide you with the correct usage when you ru
116101
- [libexec](/libraries/libexec): Provides ELF support.
117102
- [libdebug](/libraries/libdebug): Provides debugging functionality.
118103

119-
### Ports
104+
## Ports
120105

121106
Ports can be installed by running [ports.sh](ports/ports.sh) supplied with the desired port as an argument. The required dependencies will also be built and installed.
122107

108+
Some of the more exciting ports are:
109+
123110
- [DOOM](ports/doom)
124111
- [binutils](ports/binutils)
125112
- [gcc](ports/gcc)
113+
- [sdl2](ports/sdl2)
114+
- Also, [sdl2_gfx](ports/sdl2_gfx), [sdl2_image](ports/sdl2_image), and [sdl2_ttf](ports/sdl2_ttf)
126115

127-
### Building / Running
116+
## Building / Running
128117
- See [INSTRUCTIONS.md](INSTRUCTIONS.md) for instructions.
129118

130-
### Contributing
119+
## Contributing
131120
- See [CONTRIBUTING.md](CONTRIBUTING.md) for information on how to contribute to duckOS.
132121

133-
### Credits
122+
## Credits
134123
- [blanham's mirror of liballoc 1.1](https://github.com/blanham/liballoc) for the kernel heap allocation implementation (it's open domain, so if you want to use it, I highly recommend it)
135124
- [SerenityOS](http://serenityos.org) for a lot of inspiration
136125
- [Gohufont](https://font.gohu.org/) for the font (licensed under [WTFPL](http://www.wtfpl.net/about/))
137126

138-
### License
127+
## License
139128
- See [LICENSE.TXT](LICENSE.txt).

0 commit comments

Comments
 (0)