Required Knowledge: Difference between revisions

convert first- and second- person pronouns
[unchecked revision][unchecked revision]
m (Added information about WSL)
(convert first- and second- person pronouns)
Line 1:
{{FirstPerson}}
'''If you think you can skip this, it's probably just for you.'''
'''Beginners in OSDev are strongly recommended not to skip this.'''
 
Writing an OS is ''not'' a beginner's task. In fact, writing an OS is usually considered the most difficult programming task. You will need aboveAbove-average programming skills are needed before even considering a project like this. Failure to comply will make you look silly.
 
Developing an OS requires these knowledge:
Some things you ''will'' need to know are:
 
# '''Basic Computer Science''': Youintimate need to be intimately familiarfamiliarity with hexadecimal and binary notation as well as boolean logic and similar fundamental knowledge, like data structures, their construction and manipulation, searching and sorting algorithms, abstract programming concepts, etc. etc...
# '''Language and Vocabulary''': You need to be ableability to read and write (technical) English at a competent level. Virtually all technical documentation is in English, and most of the resources you could find on the web (like this Wiki and the [http://forum.osdev.org forum]) are, also. Using incorrect terminology will make you look foolish and confuse the people willing to help you.
# '''Language and Vocabulary, pt. 2''': Most operating systems featured on this site, as well as most of the code snippets and examples, are written in [[C]] (or [[C++]]). EvenIndividuals should be competent in making heads and tails of it even if youthey choose to use another language (like [[FreeBASIC]] or [[Pascal]]), since C is the ''lingua franca'' of programming, and you should be competent in making heads and tails of it.
# '''Assembly''': You should have knowledge about the low-level language [[Assembly]]. Read a book. Take a course at school. Write some user-space code to familiarize yourself with it. You ''will'' need it, even if you plan to write most of your operating system in a higher-level language.
# '''Programming experience''': Learning about programming with an OS project is considered a bad idea. Not only should you know the language in which you will be developing inside out, you should also be familiar with version control, debugging, etc. In short, you should have written quite a few user-space programs in that language successfully before trying OS development.
# '''Programming Practices''': You should know how to write both code and user documentation, and be prepared to carefully document all aspects of your code and design, even if the project is purely for your personal use. Also, you should learn and use suitable [[Code Management]] practices, including setting up and using an off-site repository (e.g. Savannah, GitHub, GitLab, Heroku). These two practices alone will--not may, but ''will''--save you a great deal of trouble in the future, ''if'' you follow them.
9

edits