Required Knowledge: Difference between revisions

More details about familiarizing yourself with Unix tools under Windows and MacOS
[unchecked revision][unchecked revision]
(Add "See Also")
(More details about familiarizing yourself with Unix tools under Windows and MacOS)
Line 10:
# '''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.
# '''UNIX experience''': You will soon notice that many of the tools used in OS development are developed for Unix, and later ported over to Windows. The Linux kernel is often used as reference or example for how things can be done, and many of the hobby operating systems have some resemblance to Unix. Having experience with the Unix command line (preferably bash or ksh) is a very important requirement. ([[Cygwin]] provides an easy-to-install Unix command line for Windows.). If you haven't, go ahead and use Linux or a BSD for a while - for Windows users, this can be accomplished quite easily by using a [[Emulators|virtualizer]] (see below) to host a virtual system, without the need to re-partition your home system. For MacOS users, you can simply use the Terminal - OS X built on a Unix variant (a combination of Mach and BSD), so as long as you have XCode and an emulator or virtualizer installed, no further tools are necessary (though you will need to set up a cross-compiler); the default Terminal shell is the Bourne-Again Shell, but C shell and Korn shell are available as well.
# '''Toolchain''': You must know the behavioral details of your compiler, assembler, linker, and make utility. You should have the documentation of the tools you use at hand, and refer to them ''before'' asking the community. Rest assured that any possible beginner's question about [[GCC]], [[GAS|GNU as]], [[NASM]], [[LD|GNU ld]], [[Visual Studio]] and [[GRUB]] has been answered twice over. Search before you ask.
# '''Emulators and Virtualizers''': Familiarity with tools such as [[Bochs]], [[VirtualBox]], [[QEMU]], or [[Microsoft_Virtual_PC|Virtual PC]] is key to having a reasonable turn-around in development, and provide a buffer between your real hardware and your test system. While these can be learned for the specific purpose of OS dev, you will certainly want to be aware of what they are and where to get them before beginning an OS project.
Anonymous user