#Linux At the bottom is Linux the kernel: a small part of the system. It provides access to hardware, and implements security. #Gnu Then Gnu (Libraries; bash; tools:ls, etc; C compiler, etc). Most of the operating system. #X11 Then X11 (Or Wayland, or ...), the base GUI subsystem. This runs in user-land (outside of the kernel): it is just another process, with some privileges. The kernel dose not get involved, except to give access to the hardware. And providing inter-process communication, so that other processes can talk with the X11 server. #X11 library A simple abstraction to allow you to write code for X11. #GUI libraries Libraries such as qt, gtk, sdl, are next they make it easier to use X11, and work on other systems such as wayland, Microsoft's Windows, or MacOS. #Applications Applications sit on top of the libraries. #Summary It looks something like this ``` ┌─────┬─────┬─────┬──────────────────────────┐ │ SDL │ GTK │ SDL │ ... │ ├─────┴─────┴─────┴──────────────────────────┤ │ xLib │ ├────────────────────────────────────────────┤ │ X11 │ ├─────────────┬────┬─────────────────────────┤ │ Gnu tools │ │ │ ├─────────────┘ │ │ │ Libraries │ │ ├──────────────────┤ │ │ Linux │ │ ├──────────────────┘ │ │ Hardware │ └────────────────────────────────────────────┘ ``` #xlib Using xlib, is a good way to learn to learn about X11. However do some reading about X11 first. #SDL SDL will give you low level access, direct to bit-planes for you to directly draw to. #Going lower If you want to go lower, then I am not sure what good current options are, but here are some ideas. - Get an old Amiga, or simulator. And some good documentation. e.g. https://archive.org/details/Amiga_System_Programmers_Guide_1988_Abacus/mode/2up (I had 2 books, this one and similar). - Look at what can be done on a raspberry pi. I have not looked into this.