Page 1 of 1

What's the best education for OS development?

Posted: Fri Jun 23, 2017 10:27 am
by Murmur
Hi, everyone! I've just registered to this forum two days ago.
I'm a university student of CS with a "nuance" in software engineering.
I'm interested in software development and, in particular, in what I define THE software: the operating system.
I've attended the courses of computer architecture and operating systems during my career, but they weren't as complete as those taught in other universities of my country.
I'm really interested in OS development (in particular in developing schedulers, device drivers and the file system), and I want to get into this task with the right tools and knowledge.
I've already read the sections Required Knowledge and Books, but I think that the knowledge acquired in a university course makes for a solid base.
So, I'm wondering: what's the best education for OS development? Does Computer Science give the knowledge required for developing an OS? Or is Computer Engineering (CE, ECE, EECS) a better option?
I know that some OS developer are computer scientist (like Linus Torvalds and Gary Kildall), while others are engineers (Kenneth Thompson, Klaus Knopper).
So, what do you think? What about you? Are you from CS or from CE, ECE, EECS?
Any answer will be much appreciated.

Re: What's the best education for OS development?

Posted: Fri Jun 23, 2017 10:34 am
by Geri
you must understand the C programming language to understand everything else and be able to do the operating system in practice. you also need to understand the theory and how various various hardware works - to be able to make good decidsions. all IT university will teach these. but dont expect that somebody will magically teach you how to actually do an operating system (even if maybe once you will have a homework to create a simple kernel).

Re: What's the best education for OS development?

Posted: Sat Jun 24, 2017 11:03 am
by Korona
CS education helps with getting things like search trees, schedulers, timing queues and other relatively complex algorithms right. It also helps you gauge if certain algorithms are suitable in specific places: For example running a non-constant time algorithm in certain parts of the kernel might be undesirable as it might enable denial of service attacks. However not a lot of CS is necessary for OS development. Practical programming skills are much more important than the ability to analyze algorithms theoretically. Being able to manage large code bases are always good.

Any CS / software engineering degree that contains some low level courses should prepare you well for OS development.

Re: What's the best education for OS development?

Posted: Sat Jun 24, 2017 2:46 pm
by Kevin
I don't know about your university, but allegedly it's possible to get a CS degree just on the theory without being able to write a program. If that's you, then take a step back and learn programming (including the low-level stuff like pointers).

However, given your interest and that you're posting here, I'd rather assume that indeed you already have the required programming skills. In that case, the only thing you're missing is practice. In other words: You best learn how to develop an OS by writing one. As usual, plan to throw the first one away, or at least to rewrite major parts of it later, but for now, just get started.

Re: What's the best education for OS development?

Posted: Sat Jul 29, 2017 1:52 am
by samiam95124
Opinion:

If you didn't:

1. Get an OS development course in CS.

2. Get a compiler course in CS.

3. Didn't see the heavens open up and a ray of light touch you from above when you realized the beauty of pointers.

Then you have been mis-educated. Go back to your university and demand your money back.

Scott Franco
San Jose, CA

Re: What's the best education for OS development?

Posted: Sat Jul 29, 2017 4:28 am
by mallard
CS courses vary massively on a scale from "pure" (all about mathematics and logic) to "applied" (all about programming and hardware). A good course is probably somewhere in the middle, but things like OS design are very much at the "applied" end of the spectrum. Make sure you understand what kind of course is being offered before starting it. There's nothing "wrong" with taking a highly "pure" CS course, but don't expect to be an expert programmer at the end of it.

However, by far the most important skill of any programmer is that they actually understand how to program. Many (if not most) "programmers" do not have this skill (and this includes many that have had long careers in the field), they simply know the syntax and idioms of one or two programming languages and how to copy-paste code from examples and tutorials and do so with little to no understanding of what they're actually doing.

Basically, if you can't pick up the syntax and basic idioms of a new programming language and start writing basic-but-useful code that's not taken directly from a tutorial within a few days of study, you probably lack this skill. If you're the kind of person who goes through the first couple of pages of a tutorial and then find yourself trying out the ideas without guidance, never really returning to the tutorial, you probably do have this skill.

Even if your programming background is in something completely unrelated to OSdev (e.g. web development, mobile apps, databases, etc.), if you understand how to program, you're in a good position.

Once you have this skill, and there's no better way to gain it than study and practice (if you think you're in the "one or two languages with no real understanding" place, try learning a new language/framework, try porting some previous work to a new platform, etc.), then a good starting place for OSdev would be decent book on the theory and practice of operating systems; I'd recommend "Operating Systems: Design and Implementation" by Andrew S Tanenbaum, commonly known as "the MINIX book", but there are others. Once you're at a point where you have a decent (if not necessarily complete) understanding of operating systems start with a good OSdev tutorial (e.g. the "bare bones" tutorial from the wiki) and if you have the previously mentioned skills, you'll probably never really finish the tutorial as such and will be writing your own OS pretty much straight away.