Wow, I had to take this chance to let you know how much your book impacted me as well. What I loved so much about "The Cuckoo's Egg" is that it blends a great story, technical details, and personal growth. I've never read anything else like it.
From all the other comments, it seems many people got as much out of it as I did. I especially liked your description of the Emacs bug that allowed outside access to Berkeley's computers. It brought out my great fascination with finding and fixing security holes. Thank you so much for this!
Cliff, if you read this comment, are there any books that impacted you as much as your book impacted all of us? Since reading The Cuckoo's Egg, I've searched for similar books but have yet to find any that feel just as enjoyable. I'm open to recommendations from everyone else as well. :)
I wonder if learning how a more simple microcontroller boots might help you.
I had the same questions as you around a year ago. As other commenters mentioned, modern hardware is incredibly complex and needs to go through many, many steps before it can boot a kernel. Modern CPUs have a bunch of legacy requirements that still exist to keep backward compatibility with older hardware.
One good example of these legacy requirements is the A20 line on x86 [1]. A20 can be considered a boolean flag that determines whether the CPU can access more than 1MB of RAM. The A20 flag was introduced in the Intel 286 because its predecessor, the 8086 had a limit of 1MB of RAM. The 286 needed to access 16MB of RAM, so Intel introduced the A20 flag that determines whether the CPU can access memory past 1MB. The A20 line still exists in x86_64 CPUs today, so it needs to be enabled before the entire RAM address space is used.
There are a TON of legacy requirements like the A20 line on modern CPUs (especially x86_64). It can make it very difficult to figure out what is going on in the boot process. For me, I found it much easier to start learning how simple pieces of hardware works before moving on to x86. The boot process for Raspberry Pi's RP2040 microcontroller is explained in the datasheet [2] and I found it to be a great resource to figure out which hardware needs to be initialized and what that actually means.
Just like x86, microcontrollers have many tasks they need to complete before loading the main program. But these steps are much less ambiguous and are described very well in the RP2040 datasheet. It lists every step that it goes through before the main program starts (including stuff like initializing the clocks to specified speeds). After I felt like I thoroughly understood how the RP2040 boots, it became much easier to understand why the bootloader needs to complete certain tasks.
Not sure if you are familiar with assembly, but you can also checkout part of the RP2040's bootloader here [3]. There are a few different bootloaders for the RP2040, the one I linked is the one referenced in the datasheet. Its purpose is to load the main program from a specified location in the flash memory chip.
Remember that the boot process on x86 processors has been changing for around 40 years, so expect it to take a while before you feel more comfortable with the terms used in bootloading and hardware. I've been learning this stuff for around a year and still feel like I only understand a fraction of the x86 boot process. But I find it so fascinating that I can't help but want to learn more of its complexity.
I love talking about hardware and the boot process, so feel free to let me know if you have any more questions! :)
Maybe not the most important problem, but I've been thinking about the massive amount of paperwork that everyone is flooded with through life, at least in the US.
A few of my family members have had health issues since birth and the amount of paperwork my family has been constantly filling out for decades is extremely overwhelming. And this is all extra paperwork added to the normal amount coming from work, the bank, college, car insurance, etc. Even simple forms such as renewing your drivers license add up when there are tens or hundreds of other similar forms every year.
One seemingly low hanging fruit is the time waste of copying the same information over and over when filling out these forms. In 2023, you would think that this part would have been solved by now, but I don't know of any tools with this functionality. I wonder if the complexity of PDF files is one reason that no tools currently exist to solve this problem.
This is mostly a rant because I still cannot figure out any good solutions to this, nor am I actively working on it aside from thinking the problems through in my free time. New technology might be able to solve the problem of copying similar info between forms, but I wonder if it can only be solved at the government level. And I have no idea how to go about solving that because its not like all paperwork is bad; I can understand the need for it in most cases. I just feel like the action of filling out forms should not be such a overwhelmingly large stressor in modern life.
I would love to hear other people's opinions on this. I feel like if there could be any solution that allows average people to spend less time filling out and worrying about paperwork would be a massive benefit on our mental health.
Wow, this is crazy, thank you so much for sharing! I love reading history like this! :D
Every time I read about the history of character encodings I feel like I learn about a new encoding standard that attempted to standardize things. Reading about this led me to reading more about ASCII as well. I learned it was derived from the 1924 ITA2 standard which was itself derived from the "Baudot" printing telegraph encoding from 1874! It always amazes me how much history surrounds this topic! [1]
Also, that DTIC site is such a treasure trove of great information! :D
Just wanted to say thank you for linking these documents! I find the history of character encoding design so interesting, especially from primary sources such as these. :)
When I have enough mental energy, my favorite hobby is working on personal projects; mostly software but sometimes hardware. I love the process of slowly iterating and watching a project grow and improve over time. I also really enjoy reading about and testing out hardware. I find hardware to be so complex and interesting, yet also somewhat understandable when using the right abstractions in your head. These activities give me a sense of joy unlike anything else. However, when I get mentally drained, I resort to other activities.
When I need to relax, there are a few activities I really enjoy:
* Sit in nature and watch birds (yesterday two birds started making a nest in my birdhouse and I always find joy watching them)
* Hanging out with my two cats and dog; they are a great source of joy
* Learning from art. This comes in many forms, but I really like art that makes me reflect on my own life or life in general. Recently, I've been watching Studio Ghibli films and they are a great example. But I also enjoy comedy shows that simply give me a good laugh.
* Trying to create art (usually just sketching), which I don't do often, but enjoy it every time.
The Pi4 can boot from usb, so if this is a problem then at least there is an alternative. And a better alternative I might add, as the usb bus speeds are much faster than sd card reads/writes.
From all the other comments, it seems many people got as much out of it as I did. I especially liked your description of the Emacs bug that allowed outside access to Berkeley's computers. It brought out my great fascination with finding and fixing security holes. Thank you so much for this!
Cliff, if you read this comment, are there any books that impacted you as much as your book impacted all of us? Since reading The Cuckoo's Egg, I've searched for similar books but have yet to find any that feel just as enjoyable. I'm open to recommendations from everyone else as well. :)