Skip to content

Commit

Permalink
technical writing revisions
Browse files Browse the repository at this point in the history
- a conjunction such as "but" cannot start a sentence.
- the word choice of "high-level" alone can be misinterpreted as difficult.
  • Loading branch information
y2kbcm1 committed Jul 9, 2018
1 parent 6cd3574 commit f13bfdb
Showing 1 changed file with 6 additions and 6 deletions.
12 changes: 6 additions & 6 deletions docs/Introduction.md
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
## Raspberry Pi OS project introduction or how to efficiently learn operating system development?

A few years ago, I opened the source code of the Linux kernel for the first time. At that time, I considered myself more or less a skillful software developer: I knew a little bit of assembler and C programming, and had a high-level understanding of major operating system concepts, such as process scheduling and virtual memory management. But my first attempt was a complete failure - I understood almost nothing.
A few years ago, I opened the source code of the Linux kernel for the first time. At that time, I considered myself more or less a skillful software developer: I knew a little bit of assembler and C programming, and had a high-level understanding of major operating system concepts, such as process scheduling and virtual memory management. However, my first attempt was a complete failure - I understood almost nothing.

For other software projects that I have to deal with, I have a simple approach that usually works very well: I find the entry point of the program and then start reading the source code, going as deep as necessary to understand all the details that I am interested in. This approach works well, but not for something as sophisticated as an operating system. It was not just that it took me more than a week just to find an entry point - the main problem was that I quickly found myself in a situation where I was looking at a few lines of code, and I had no idea how to find any clues about what those lines were doing. This was especially true for the low-level assembler source code, but it worked no better for any other part of the system that I tried to investigate.

But, I don't like the idea of dismissing a problem just because it looks complex from the beginning. Furthermore, I believe that there are no complex problems - instead, there are a lot of problems we simply don't know how to address efficiently. So I started to look for an effective way to learn OS development in general and Linux in particular.
I don't like the idea of dismissing a problem just because it looks complex from the beginning. Furthermore, I believe that there are no complex problems. Instead, there are a lot of problems we simply don't know how to address efficiently, so I started to look for an effective way to learn OS development in general and Linux in particular.

### Challenges in learning OS development

I know that there are tons of books and documentation written about Linux kernel development, but neither of them provides me with the learning experience that I want. Half of the material I find too high-level, and I already know it. With the other half I have a very similar problem that I have with exploring the kernel source code: as soon as a book goes deep enough, 90% of the details appear to be related not to the core concepts, but instead to some security, performance or legacy considerations as well as to millions of features that the Linux kernel supports. So instead of learning core operating system concepts, you always end up digging into the implementation details of those features.
I know that there are tons of books and documentation written about Linux kernel development, but neither of them provides me with the learning experience that I want. Half of the material are so superficial that I already know it. With the other half I have a very similar problem that I have with exploring the kernel source code: as soon as a book goes deep enough, 90% of the details appear to be irrelevant to the core concepts, but related to some security, performance or legacy considerations as well as to millions of features that the Linux kernel supports. As a result, instead of learning core operating system concepts, you always end up digging into the implementation details of those features.

You may be wondering why I need to learn operating system development in the first place. For me, the main reason is that I was always interested in how things work under the hood. And it is not just curiosity: the more difficult the task you are working on, frequently things begin to trace down to the operating system level. You just can't make fully informed technical decisions if you don't understand how everything works at a lower level. Another thing is that if you really like a technical challenge, working with OS development can be an exciting task for you.
You may be wondering why I need to learn operating system development in the first place. For me, the main reason is that I was always interested in how things work under the hood. It is not just curiosity: the more difficult the task you are working on, frequently things begin to trace down to the operating system level. You just can't make fully informed technical decisions if you don't understand how everything works at a lower level. Another thing is that if you really like a technical challenge, working with OS development can be an exciting task for you.

The next question you may ask is, why Linux? Other operating systems would probably be easier to approach. The answer is that I want my knowledge to be, at least in some way, relevant to what I am currently doing and to something I expect to be doing in the future. Linux is perfect in this regard because nowadays everything from small IoT devices to large servers tend to run Linux.

Expand All @@ -20,7 +20,7 @@ But why has nobody created a similar book for kernel developers? I think this is

### OS requirements

So, I started working on the project, which later became the [RPi OS](https://github.com/s-matyukevich/raspberry-pi-os). The first thing I had to do was to determine what parts of kernel development I considered to be "basic", and what components I considered to be not so essential and can be skipped (at least in the beginning). In my understanding, each operating system has 2 fundamental goals:
I started working on the project, which later became the [RPi OS](https://github.com/s-matyukevich/raspberry-pi-os). The first thing I had to do was to determine what parts of kernel development I considered to be "basic", and what components I considered to be not so essential and can be skipped (at least in the beginning). In my understanding, each operating system has 2 fundamental goals:

1. Run user processes in isolation.
1. Provide each user process with a unified view of the machine hardware.
Expand Down Expand Up @@ -56,4 +56,4 @@ One major drawback of any technical book is that very soon after release each bo

##### Next Page

[Contributing to the Raspberry PI OS](../docs/Contributions.md)
[Contributing to the Raspberry PI OS](../docs/Contributions.md)

0 comments on commit f13bfdb

Please sign in to comment.