{"id":134,"date":"2007-07-27T23:26:19","date_gmt":"2007-07-28T06:26:19","guid":{"rendered":"http:\/\/ryanorser.com\/?p=134"},"modified":"2007-07-27T23:26:19","modified_gmt":"2007-07-28T06:26:19","slug":"20070727-slashdot-a-historical-look-at-the-first-linux-kernel","status":"publish","type":"post","link":"https:\/\/ryanorser.com\/index.php\/2007\/07\/27\/20070727-slashdot-a-historical-look-at-the-first-linux-kernel\/","title":{"rendered":"2007\/07\/27 Slashdot: A historical Look at the First Linux Kernel"},"content":{"rendered":"<p>This is a <a href=\"http:\/\/linux.slashdot.org\/linux\/07\/07\/27\/0542212.shtml\" title=\"Linux Kernel 0.01 Article\">article<\/a> on slashdot taking a look at the historical Linux Kerel 0.01:<\/p>\n<blockquote><p> \t\t\tLinuxFan writes <em>&#8220;KernelTrap has a fascinating article about the <a href=\"http:\/\/kerneltrap.org\/node\/14002\">first Linux kernel<\/a>, version 0.01, complete with source code and photos of Linus Torvalds as a young man attending the University of Helsinki. Torvalds originally planned to call the kernel &#8220;Freax,&#8221; and in his first announcement noted, &#8220;I&#8217;m doing a (free) operating system (just a hobby, won&#8217;t be big and professional like gnu) for 386(486) AT clones.&#8221; He also stressed that the kernel was very much tied to the i386 processor, &#8220;simply, I&#8217;d say that porting is impossible.&#8221; Humble beginnings.&#8221;<\/em><\/p><\/blockquote>\n<p>Now for the real article itsel:<\/p>\n<blockquote><p>&#8220;<em>This is a free minix-like kernel for i386(+) based AT-machines,<\/em>&#8221; began the Linux version 0.01 release notes in September of 1991 for the first release of the Linux kernel.  &#8220;<em>As the version number (0.01) suggests this is not a mature product. Currently only a subset of AT-hardware is supported (hard-disk, screen, keyboard and serial lines), and some of the system calls are not yet fully implemented (notably mount\/umount aren&#8217;t even implemented).<\/em>&#8221;  Booting the original 0.01 Linux kernel required bootstrapping it with <a href=\"http:\/\/en.wikipedia.org\/wiki\/Minix\">minix<\/a>, and the keyboard driver was written in assembly and hard-wired for a Finnish keyboard. The listed features were mostly presented as a comparison to minix and included, efficiently using the 386 chip rather than the older 8088, use of system calls rather than message passing, a fully multithreaded FS, minimal task switching, and visible interrupts. Linus Torvalds noted, &#8220;<em>the guiding line when implementing linux was: get it working fast. I wanted the kernel simple, yet powerful enough to run most unix software.<\/em>&#8221;  In a section titled &#8220;Apologies :-)&#8221; he noted:<\/p>\n<blockquote><p>&#8220;This isn&#8217;t yet the &#8216;mother of all operating systems&#8217;, and anyone who hoped for that will have to wait for the first real release (1.0), and even then you might not want to change from minix. This is a source release for those that are interested in seeing what linux looks like, and it&#8217;s not really supported yet.&#8221;<\/p><\/blockquote>\n<p><a href=\"http:\/\/kerneltrap.org\/files\/linus3.gif\"><img decoding=\"async\" src=\"http:\/\/kerneltrap.org\/files\/linus3_small.png\" align=\"right\" border=\"0\" \/><\/a>Linus had originally intended to call the new kernel &#8220;Freax&#8221;.  <a href=\"http:\/\/en.wikipedia.org\/wiki\/Ari_Lemmke\">According to Wikipedia<\/a>, the name Linux was actually invented by Ari Lemmke who maintained the ftp.funet.fi FTP server from which the kernel was originally distributed.<\/p>\n<p>The initial post that Linus made about Linux was to the comp.os.minix Usenet group titled, &#8220;<a href=\"http:\/\/groups.google.com\/group\/comp.os.minix\/browse_thread\/thread\/76536d1fb451ac60\/b813d52cbc5a044b?&amp;hl=en#b813d52cbc5a044b\">What would you like to see most in minix<\/a>&#8220;.  It began:<\/p>\n<blockquote><p>&#8220;I&#8217;m doing a (free) operating system (just a hobby, won&#8217;t be big and professional like gnu) for 386(486) AT clones. This has been brewing since april, and is starting to get ready. I&#8217;d like any feedback on things people like\/dislike in minix, as my OS resembles it somewhat (same physical layout of the file-system (due to practical reasons) among other things).&#8221;<\/p><\/blockquote>\n<p>Later in the same thread, Linus went on to talk about how unportable the code was:<\/p>\n<blockquote><p>&#8220;Simply, I&#8217;d say that porting is impossible. It&#8217;s mostly in C, but most people wouldn&#8217;t call what I write C. It uses every conceivable feature of the 386 I could find, as it was also a project to teach me about the 386. As already mentioned, it uses a MMU, for both paging (not to disk yet) and segmentation. It&#8217;s the segmentation that makes it REALLY 386 dependent (every task has a 64Mb segment for code &amp; data &#8211; max 64 tasks in 4Gb. Anybody who needs more than 64Mb\/task &#8211; tough cookies).<\/p>\n<p>&#8220;It also uses every feature of gcc I could find, specifically the __asm__ directive, so that I wouldn&#8217;t need so much assembly language objects. Some of my &#8216;C&#8217;-files (specifically mm.c) are almost as much assembler as C. It would be &#8216;interesting&#8217; even to port it to another compiler (though why anybody would want to use anything other than gcc is a mystery).<\/p>\n<p><a href=\"http:\/\/kerneltrap.org\/files\/linus1.gif\"><img decoding=\"async\" src=\"http:\/\/kerneltrap.org\/files\/linus1_small.png\" align=\"right\" border=\"0\" \/><\/a><\/p>\n<p>&#8220;Unlike minix, I also happen to LIKE interrupts, so interrupts are handled without trying to hide the reason behind them (I especially like my hard-disk-driver. Anybody else make interrupts drive a state-machine?). All in all it&#8217;s a porters nightmare. &#8220;<\/p><\/blockquote>\n<p>Indeed, Linux 1.0 was released on March 13th, 1994 supporting only the 32-bit i386 architecture. However, by the release of Linux 1.2 on March 7th, 1995 it had already been ported to 32-bit MIPS, 32-bit SPARC, and the 64-bit Alpha. By the release of Linux 2.0 on June 9th, 1996 support had also been added for the 32-bit m68k and 32-bit PowerPC architectures. And jumping forward to the Linux 2.6 kernel, first released in 2004, it has been and continues to be <a href=\"http:\/\/en.wikipedia.org\/wiki\/Linux_kernel_portability_and_supported_architectures\">ported to numerous<\/a> additional architectures.<\/p>\n<hr \/>\n<p><strong>Linux 0.01 release notes:<\/strong><\/p>\n<pre>\t\tNotes for linux release 0.01\n\n\t\t0. Contents of this directory\n\nlinux-0.01.tar.Z\t- sources to the kernel\nbash.Z\t\t\t- compressed bash binary if you want to test it\nupdate.Z\t\t- compressed update binary\nRELNOTES-0.01\t\t- this file\n\n\t\t1. Short intro\n\nThis is a free minix-like kernel for i386(+) based AT-machines.  Full\nsource is included, and this source has been used to produce a running\nkernel on two different machines.  Currently there are no kernel\nbinaries for public viewing, as they have to be recompiled for different\nmachines.  You need to compile it with gcc (I use 1.40, don't know if\n1.37.1 will handle all __asm__-directives), after having changed the\nrelevant configuration file(s).\n\nAs the version number (0.01) suggests this is not a mature product.\nCurrently only a subset of AT-hardware is supported (hard-disk, screen,\nkeyboard and serial lines), and some of the system calls are not yet\nfully implemented (notably mount\/umount aren't even implemented).  See\ncomments or readme's in the code.\n\nThis version is also meant mostly for reading - ie if you are interested\nin how the system looks like currently.  It will compile and produce a\nworking kernel, and though I will help in any way I can to get it\nworking on your machine (mail me), it isn't really supported.  Changes\nare frequent, and the first \"production\" version will probably differ\nwildly from this pre-alpha-release.\n\nHardware needed for running linux:\n\t- 386 AT\n\t- VGA\/EGA screen\n\t- AT-type harddisk controller (IDE is fine)\n\t- Finnish keyboard (oh, you can use a US keyboard, but not\n\t  without some practise :-)\n\nThe Finnish keyboard is hard-wired, and as I don't have a US one I\ncannot change it without major problems. See kernel\/keyboard.s for\ndetails. If anybody is willing to make an even partial port, I'd be\ngrateful. Shouldn't be too hard, as it's tabledriven (it's assembler\nthough, so ...)\n\nAlthough linux is a complete kernel, and uses no code from minix or\nother sources, almost none of the support routines have yet been coded.\nThus you currently need minix to bootstrap the system. It might be\npossible to use the free minix demo-disk to make a filesystem and run\nlinux without having minix, but I don't know...\n\n\t\t2. Copyrights etc\n\nThis kernel is (C) 1991 Linus Torvalds, but all or part of it may be\nredistributed provided you do the following:\n\n\t- Full source must be available (and free), if not with the\n\t  distribution then at least on asking for it.\n\n\t- Copyright notices must be intact. (In fact, if you distribute\n\t  only parts of it you may have to add copyrights, as there aren't\n\t  (C)'s in all files.) Small partial excerpts may be copied\n\t  without bothering with copyrights.\n\n\t- You may not distibute this for a fee, not even \"handling\"\n\t  costs.\n\nMail me at [email blocked] if you have any questions.\n\nSadly, a kernel by itself gets you nowhere. To get a working system you\nneed a shell, compilers, a library etc. These are separate parts and may\nbe under a stricter (or even looser) copyright. Most of the tools used\nwith linux are GNU software and are under the GNU copyleft. These tools\naren't in the distribution - ask me (or GNU) for more info.\n\n\t\t3. Short technical overview of the kernel.\n\nThe linux kernel has been made under minix, and it was my original idea\nto make it binary compatible with minix. That was dropped, as the\ndifferences got bigger, but the system still resembles minix a great\ndeal. Some of the key points are:\n\n\t- Efficient use of the possibilities offered by the 386 chip.\n\t  Minix was written on a 8088, and later ported to other\n\t  machines - linux takes full advantage of the 386 (which is\n\t  nice if you \/have\/ a 386, but makes porting very difficult)\n\n\t- No message passing, this is a more traditional approach to\n\t  unix. System calls are just that - calls. This might or might\n\t  not be faster, but it does mean we can dispense with some of\n\t  the problems with messages (message queues etc). Of course, we\n\t  also miss the nice features :-p.\n\n\t- Multithreaded FS - a direct consequence of not using messages.\n\t  This makes the filesystem a bit (a lot) more complicated, but\n\t  much nicer. Coupled with a better scheduler, this means that\n\t  you can actually run several processes concurrently without\n\t  the performance hit induced by minix.\n\n\t- Minimal task switching. This too is a consequence of not using\n\t  messages. We task switch only when we really want to switch\n\t  tasks - unlike minix which task-switches whatever you do. This\n\t  means we can more easily implement 387 support (indeed this is\n\t  already mostly implemented)\n\n\t- Interrupts aren't hidden. Some people (among them Tanenbaum)\n\t  think interrupts are ugly and should be hidden. Not so IMHO.\n\t  Due to practical reasons interrupts must be mainly handled by\n\t  machine code, which is a pity, but they are a part of the code\n\t  like everything else. Especially device drivers are mostly\n\t  interrupt routines - see kernel\/hd.c etc.\n\n\t- There is no distinction between kernel\/fs\/mm, and they are all\n\t  linked into the same heap of code. This has it's good sides as\n\t  well as bad. The code isn't as modular as the minix code, but\n\t  on the other hand some things are simpler. The different parts\n\t  of the kernel are under different sub-directories in the\n\t  source tree, but when running everything happens in the same\n\t  data\/code space.\n\nThe guiding line when implementing linux was: get it working fast. I\nwanted the kernel simple, yet powerful enough to run most unix software.\nThe file system I couldn't do much about - it needed to be minix\ncompatible for practical reasons, and the minix filesystem was simple\nenough as it was. The kernel and mm could be simplified, though:\n\n\t- Just one data structure for tasks. \"Real\" unices have task\n\t  information in several places, I wanted everything in one\n\t  place.\n\n\t- A very simple memory management algorithm, using both the\n\t  paging and segmentation capabilities of the i386. Currently\n\t  MM is just two files - memory.c and page.s, just a couple of\n\t  hundreds of lines of code.\n\nThese decisions seem to have worked out well - bugs were easy to spot,\nand things work.\n\n\t\t4. The \"kernel proper\"\n\nAll the routines handling tasks are in the subdirectory \"kernel\". These\ninclude things like 'fork' and 'exit' as well as scheduling and minor\nsystem calls like 'getpid' etc. Here are also the handlers for most\nexceptions and traps (not page faults, they are in mm), and all\nlow-level device drivers (get_hd_block, tty_write etc). Currently all\nfaults lead to a exit with error code 11 (Segmentation fault), and the\nsystem seems to be relatively stable (\"crashme\" hasn't - yet).\n\n\t\t5. Memory management\n\nThis is the simplest of all parts, and should need only little changes.\nIt contains entry-points for some things that the rest of the kernel\nneeds, but mostly copes on it's own, handling page faults as they\nhappen. Indeed, the rest of the kernel usually doesn't actively allocate\npages, and just writes into user space, letting mm handle any possible\n'page-not-present' errors.\n\nMemory is dealt with in two completely different ways - by paging and\nsegmentation.  First the 386 VM-space (4GB) is divided into a number of\nsegments (currently 64 segments of 64Mb each), the first of which is the\nkernel memory segment, with the complete physical memory identity-mapped\ninto it.  All kernel functions live within this area.\n\nTasks are then given one segment each, to use as they wish. The paging\nmechanism sees to filling the segment with the appropriate pages,\nkeeping track of any duplicate copies (created at a 'fork'), and making\ncopies on any write. The rest of the system doesn't need to know about\nall this.\n\n\t\t6. The file system\n\nAs already mentioned, the linux FS is the same as in minix. This makes\ncrosscompiling from minix easy, and means you can mount a linux\npartition from minix (or the other way around as soon as I implement\nmount :-). This is only on the logical level though - the actual\nroutines are very different.\n\n\tNOTE! Minix-1.6.16 seems to have a new FS, with minor\n\tmodifications to the 1.5.10 I've been using. Linux\n\twon't understand the new system.\n\nThe main difference is in the fact that minix has a single-threaded\nfile-system and linux hasn't. Implementing a single-threaded FS is much\neasier as you don't need to worry about other processes allocating\nbuffer blocks etc while you do something else. It also means that you\nlose some of the multiprocessing so important to unix.\n\nThere are a number of problems (deadlocks\/raceconditions) that the linux\nkernel needed to address due to multi-threading.  One way to inhibit\nrace-conditions is to lock everything you need, but as this can lead to\nunnecessary blocking I decided never to lock any data structures (unless\nactually reading or writing to a physical device).  This has the nice\nproperty that dead-locks cannot happen.\n\nSadly it has the not so nice property that race-conditions can happen\nalmost everywhere.  These are handled by double-checking allocations etc\n(see fs\/buffer.c and fs\/inode.c).  Not letting the kernel schedule a\ntask while it is in supervisor mode (standard unix practise), means that\nall kernel\/fs\/mm actions are atomic (not counting interrupts, and we are\ncareful when writing those) if you don't call 'sleep', so that is one of\nthe things we can count on.\n\n\t\t7. Apologies :-)\n\nThis isn't yet the \"mother of all operating systems\", and anyone who\nhoped for that will have to wait for the first real release (1.0), and\neven then you might not want to change from minix.  This is a source\nrelease for those that are interested in seeing what linux looks like,\nand it's not really supported yet.  Anyone with questions or suggestions\n(even bug-reports if you decide to get it working on your system) is\nencouraged to mail me.\n\n\t\t8. Getting it working\n\nMost hardware dependancies will have to be compiled into the system, and\nthere a number of defines in the file \"include\/linux\/config.h\" that you\nhave to change to get a personalized kernel.  Also you must uncomment\nthe right \"equ\" in the file boot\/boot.s, telling the bootup-routine what\nkind of device your A-floppy is.  After that a simple \"make\" should make\nthe file \"Image\", which you can copy to a floppy (cp Image \/dev\/PS0 is\nwhat I use with a 1.44Mb floppy).  That's it.\n\nWithout any programs to run, though, the kernel cannot do anything. You\nshould find binaries for 'update' and 'bash' at the same place you found\nthis, which will have to be put into the '\/bin' directory on the\nspecified root-device (specified in config.h). Bash must be found under\nthe name '\/bin\/sh', as that's what the kernel currently executes. Happy\nhacking.\n\n\t\tLinus Torvalds\t\t[email blocked]\n\t\tPetersgatan 2 A 2\n\t\t00140 Helsingfors 14\n\t\tFINLAND<\/pre>\n<hr \/>\n<p><strong>First posting about Linux:<\/strong><\/p>\n<pre><strong>From: Linus Benedict Torvalds<\/strong>\nNewsgroups: comp.os.minix\nSubject: <a href=\"http:\/\/groups.google.com\/group\/comp.os.minix\/browse_thread\/thread\/4fd4a33064d2a579\/a4ea0f118ba82dd0?lnk=gst&amp;q=GCC-1.40+and+a+posix+question&amp;rnum=1&amp;hl=en#a4ea0f118ba82dd0\">Gcc-1.40 and a posix-question<\/a>\nDate: 3 Jul 91 10:00:50 GMT\n\nHello netlanders,\n\nDue to a project I'm working on (in minix), I'm interested in the posix\nstandard definition. Could somebody please point me to a (preferably)\nmachine-readable format of the latest posix rules? Ftp-sites would be\nnice.\n\nAs an aside for all using gcc on minix - the new version (1.40) has been\nout for some weeks, and I decided to test what needed to be done to get\nit working on minix (1.37.1, which is the version you can get from\nplains is nice, but 1.40 is better :-).  To my surpice, the answer\nturned out to be - NOTHING! Gcc-1.40 compiles as-is on minix386 (with\nold gcc-1.37.1), with no need to change source files (I changed the\nMakefile and some paths, but that's it!).  As default this results in a\ncompiler that uses floating point insns, but if you'd rather not,\nchanging 'toplev.c' to define DEFAULT_TARGET from 1 to 0 (this is from\nmemory - I'm not at my minix-box) will handle that too.  Don't make the\nlibs, use the old gnulib&amp;libc.a.  I have successfully compiled 1.40 with\nitself, and everything works fine (I got the newest versions of gas and\nbinutils at the same time, as I've heard of bugs with older versions of\nld.c).  Makefile needs some chmem's (and gcc2minix if you're still using\nit).\n\n                Linus Torvalds          [email blocked]\n\nPS. Could someone please try to finger me from overseas, as I've\ninstalled a \"changing .plan\" (made by your's truly), and I'm not certain\nit works from outside? It should report a new .plan every time.<\/pre>\n<hr \/>\n<p><strong>First Linux announcement:<\/strong><\/p>\n<pre><strong>From: Linus Benedict Torvalds<\/strong> [email blocked]\nNewsgroups: comp.os.minix\nSubject: <a href=\"http:\/\/groups.google.com\/group\/comp.os.minix\/browse_thread\/thread\/76536d1fb451ac60\/b813d52cbc5a044b?&amp;hl=en#b813d52cbc5a044b\">What would you like to see most in minix?<\/a>\nDate: 25 Aug 91 20:57:08 GMT\n\nHello everybody out there using minix -\n\nI'm doing a (free) operating system (just a hobby, won't be big and\nprofessional like gnu) for 386(486) AT clones.  This has been brewing\nsince april, and is starting to get ready.  I'd like any feedback on\nthings people like\/dislike in minix, as my OS resembles it somewhat\n(same physical layout of the file-system (due to practical reasons)\namong other things).\n\nI've currently ported bash(1.08) and gcc(1.40), and things seem to work.\nThis implies that I'll get something practical within a few months, and\nI'd like to know what features most people would want.  Any suggestions\nare welcome, but I won't promise I'll implement them :-)\n\n                Linus (torva... at kruuna.helsinki.fi)\n\nPS.  Yes - it's free of any minix code, and it has a multi-threaded fs.\nIt is NOT protable (uses 386 task switching etc), and it probably never\nwill support anything other than AT-harddisks, as that's all I have :-(.\n\n<strong>From: Jyrki Kuoppala<\/strong> [email blocked]\nNewsgroups: comp.os.minix\nSubject: What would you like to see most in minix?\nDate: 25 Aug 91 23:44:50 GMT\n\nIn article Linus Benedict Torvalds writes:\n\n&gt;I've currently ported bash(1.08) and gcc(1.40), and things seem to work.\n&gt;This implies that I'll get something practical within a few months, and\n&gt;I'd like to know what features most people would want.  Any suggestions\n&gt;are welcome, but I won't promise I'll implement them :-)\n\nTell us more!  Does it need a MMU?\n\n&gt;PS.  Yes - it's free of any minix code, and it has a multi-threaded fs.\n&gt;It is NOT protable (uses 386 task switching etc)\n\nHow much of it is in C?  What difficulties will there be in porting?\nNobody will believe you about non-portability ;-), and I for one would\nlike to port it to my Amiga (Mach needs a MMU and Minix is not free).\n\nAs for the features; well, pseudo ttys, BSD sockets, user-mode\nfilesystems (so I can say cat \/dev\/tcp\/kruuna.helsinki.fi\/finger),\nwindow size in the tty structure, system calls capable of supporting\nPOSIX.1.  Oh, and bsd-style long file names.\n\n\/\/Jyrki\n\n<strong>From: Linus Benedict Torvalds<\/strong> [email blocked]\nNewsgroups: comp.os.minix\nSubject: Re: What would you like to see most in minix?\nDate: 26 Aug 91 11:06:02 GMT\n\nIn article Jyrki Kuoppala writes:\n&gt;&gt; [re: my post about my new OS]\n\n&gt;Tell us more!  Does it need a MMU?\n\nYes, it needs a MMU (sorry everybody), and it specifically needs a\n386\/486 MMU (see later).\n\n&gt;&gt;PS.  Yes - it's free of any minix code, and it has a multi-threaded fs.\n&gt;&gt;It is NOT protable (uses 386 task switching etc)\n\n&gt;How much of it is in C?  What difficulties will there be in porting?\n&gt;Nobody will believe you about non-portability ;-), and I for one would\n&gt;like to port it to my Amiga (Mach needs a MMU and Minix is not free).\n\nSimply, I'd say that porting is impossible.  It's mostly in C, but most\npeople wouldn't call what I write C.  It uses every conceivable feature\nof the 386 I could find, as it was also a project to teach me about the\n386.  As already mentioned, it uses a MMU, for both paging (not to disk\nyet) and segmentation. It's the segmentation that makes it REALLY 386\ndependent (every task has a 64Mb segment for code &amp; data - max 64 tasks\nin 4Gb. Anybody who needs more than 64Mb\/task - tough cookies).\n\nIt also uses every feature of gcc I could find, specifically the __asm__\ndirective, so that I wouldn't need so much assembly language objects.\nSome of my \"C\"-files (specifically mm.c) are almost as much assembler as\nC. It would be \"interesting\" even to port it to another compiler (though\nwhy anybody would want to use anything other than gcc is a mystery).\n\nUnlike minix, I also happen to LIKE interrupts, so interrupts are\nhandled without trying to hide the reason behind them (I especially like\nmy hard-disk-driver.  Anybody else make interrupts drive a state-\nmachine?).  All in all it's a porters nightmare.\n\n&gt;As for the features; well, pseudo ttys, BSD sockets, user-mode\n&gt;filesystems (so I can say cat \/dev\/tcp\/kruuna.helsinki.fi\/finger),\n&gt;window size in the tty structure, system calls capable of supporting\n&gt;POSIX.1.  Oh, and bsd-style long file names.\n\nMost of these seem possible (the tty structure already has stubs for\nwindow size), except maybe for the user-mode filesystems. As to POSIX,\nI'd be delighted to have it, but posix wants money for their papers, so\nthat's not currently an option. In any case these are things that won't\nbe supported for some time yet (first I'll make it a simple minix-\nlookalike, keyword SIMPLE).\n\n                Linus [email blocked]\n\nPS. To make things really clear - yes I can run gcc on it, and bash, and\nmost of the gnu [bin\/file]utilities, but it's not very debugged, and the\nlibrary is really minimal. It doesn't even support floppy-disks yet. It\nwon't be ready for distribution for a couple of months. Even then it\nprobably won't be able to do much more than minix, and much less in some\nrespects. It will be free though (probably under gnu-license or similar).\n\n<strong>From: Alan Barclay<\/strong> [email blocked]\nNewsgroups: comp.os.minix\nSubject: Re: What would you like to see most in minix?\nDate: 27 Aug 91 14:34:32 GMT\n\nIn article Linus Benedict Torvalds writes:\n\n&gt;yet) and segmentation. It's the segmentation that makes it REALLY 386\n&gt;dependent (every task has a 64Mb segment for code &amp; data - max 64 tasks\n&gt;in 4Gb. Anybody who needs more than 64Mb\/task - tough cookies).\n\nIs that max 64 64Mb tasks or max 64 tasks no matter what their size?\n--\n  Alan Barclay\n  iT                                |        E-mail : [email blocked]\n  Barker Lane                       |        BANG-STYLE : [email blocked]\n  CHESTERFIELD S40 1DY              |        VOICE : +44 246 214241\n\n<strong>From: Linus Benedict Torvalds<\/strong> [email blocked]\nNewsgroups: comp.os.minix\nSubject: Re: What would you like to see most in minix?\nDate: 28 Aug 91 10:56:19 GMT\n\nIn article Alan Barclay writes:\n&gt;In article Linus Benedict Torvalds writes:\n&gt;&gt;yet) and segmentation. It's the segmentation that makes it REALLY 386\n&gt;&gt;dependent (every task has a 64Mb segment for code &amp; data - max 64 tasks\n&gt;&gt;in 4Gb. Anybody who needs more than 64Mb\/task - tough cookies).\n\n&gt;Is that max 64 64Mb tasks or max 64 tasks no matter what their size?\n\nI'm afraid that is 64 tasks max (and one is used as swapper), no matter\nhow small they should be. Fragmentation is evil - this is how it was\nhandled. As the current opinion seems to be that 64 Mb is more than\nenough, but 64 tasks might be a little crowded, I'll probably change the\nlimits be easily changed (to 32Mb\/128 tasks for example) with just a\nrecompilation of the kernel. I don't want to be on the machine when\nsomeone is spawning &gt;64 processes, though :-)\n\n                Linus<\/pre>\n<hr \/>\n<p><strong>Early Linux installation guide:<\/strong><\/p>\n<pre>\t\tInstalling Linux on your system\n\nOk, this is a short guide for those people who actually want to get a\nrunning system, not just look at the pretty source code :-). You'll\ncertainly need minix for most of the steps.\n\n\t0.  Back up any important software.  This kernel has been\nworking beautifully on my machine for some time, and has never destroyed\nanything on my hard-disk, but you never can be too careful when it comes\nto using the disk directly.  I'd hate to get flames like \"you destroyed\nmy entire collection of Sam Fox nude gifs (all 103 of them), I'll hate\nyou forever\", just because I may have done something wrong.\n\nDouble-check your hardware.  If you are using other than EGA\/VGA, you'll\nhave to make the appropriate changes to 'linux\/kernel\/console.c', which\nmay not be easy.  If you are able to use the at_wini.c under minix,\nlinux will probably also like your drive.  If you feel comfortable with\nscan-codes, you might want to hack 'linux\/kernel\/keyboard.s' making it\nmore practical for your [US|German|...] keyboard.\n\n\t1.  Decide on what root device you'll be using.  You can use any\n(standard) partition on any of your harddisks, the numbering is the same\nas for minix (ie 0x306, which I'm using, means partition 1 on hd2).  It\nis certainly possible to use the same device as for minix, but I\nwouldn't recommend it.  You'd have to change pathnames (or make a chroot\nin init) to get minix and linux to live together peacefully.\n\nI'd recommend making a new filesystem, and filling it with the necessary\nfiles: You need at least the following:\n\n\t- \/dev\/tty0\t\t(same as under minix, ie mknod ...)\n\t- \/dev\/tty\t\t(same as under minix)\n\t- \/bin\/sh\t\t(link to bash)\n\t- \/bin\/update\t\t(I guess this should be \/etc\/update ...)\n\nNote that linux and minix binaries aren't compatible, although they use\nthe same (gcc-)header (for ease of cross-compiling), so running one\nunder the other will result in errors.\n\n\t2.  Compile the source, making necessary changes into the\nmakefiles and linux\/include\/linux\/config.h and linux\/boot\/boot.s.  I'm\nusing a slightly hacked gcc-1.40, to which I have added a -mstring-insns\nflag, which uses the i386 string instructions for structure copy etc.\nRemoving the flag from all makefiles should do the trick for you.\n\nNOTE! I'm using -Wall, and I'm not seeing many warnings (2 I think, one\nabout _exit returning although it's volatile - it's ok.) If you get\nmore warnings when compiling, something's wrong.\n\n\t3.  Copy the resultant code to a diskette of the right type.\nUse 'cp Image \/dev\/PS0' or equivalent.\n\n\t4.  Boot with the new diskette.  If you've done everything right\n(and if *I've* done everything right), you should now be running bash as\nroot.  You can't do much (alias ls='echo *' is a good idea :-), but if\nyou do run, most other things should work.  I'd be happy to hear from\nanybody that has come this far - and I'll send any ported binaries you\nmight want (and I have).  I'll also put them out for ftp if there is\nenough interest.  With gcc, make and uemacs, I've been able to stop\ncrosscompiling and actually compile natively under linux.  (I also have\na term-emu, sz\/rz, sed, etc ...)\n\nThe boot-sequence should start with \"Loading system...\", and then a\n\"Partition table ok\" followed by some root-dev info. If you forget to\nmake the \/dev\/tty0-character device, you'll never see anything but the\n\"loading\" message. Hopefully errors will be told to the console, but if\nthere are problems at boot-up there is a distinct possibility that the\nmachine just hangs.\n\n\t5.  Check the new filesystem regularly with (minix) fsck.  I\nhaven't got any errors for some time now, but I cannot guarantee that\nthis means it will never happen.  Due to slight differences in 'unlink',\nfsck will report \"mode inode XXX not cleared\", but that isn't an error,\nand you can safely ignore it (if you don't like it, do a fsck -a every\nonce in a while).  Minix \"restore\" will not work on a file deleted with\nlinux - so be extra careful if you have a tendency to delete files you\ndon't really want to.\n\nLogging out from the \"login-shell\" will automatically do a sync, and\nwill leave you hanging without any processes (except update, which isn't\nmuch fun), so do the \"three-finger-salute\" to restart dos\/minix\/linux or\nwhatever.\n\n\t6.  Mail me and ask about problems\/updates etc.  Even more\nwelcome are success-reports (yeah, sure), and bugreports or even patches\n(or pointers to corrections).\n\nNOTE!!! I haven't included diffs with the binaries I've posted for the\nsimple reason that there aren't any - I've had this silly idea that I'd\nrather change the OS than do a lot of porting.  All source to the\nbinaries can be found on nic.funet.fi under \/pub\/gnu or \/pub\/unix.\nChanges have been to makefiles or configuration files, and anybody\ninterested in them might want to contact me. Mostly it's been a matter\nof adding a -DUSG to makefiles.\n\nThe one exception if gcc - I've made some hacks on it (string-insns),\nand have got it (with the gracious help of Bruce Evans) to correctly\nemit software floating point. I haven't got diffs to that one either, as\nmy hard-disk is overflowing and I cannot accomodate both originals and\nchanges, but as per the GNU copyleft I'll make them available if\nsomeone wants them. I hope nobody want's them :-)\n\n\t\tLinus\t\t[email blocked]<\/pre>\n<hr \/>\n<p><strong>README about early pictures of Linus Torvalds:<\/strong><\/p>\n<pre>I finally got these made, and even managed to persuade Linus into\nallowing me to publish three pictures instead of only the first one.\n(He still vetoes the one with the toy moose... :-)\n\n<a href=\"http:\/\/kerneltrap.org\/files\/linus1.gif\">linus1.gif<\/a>, <a href=\"http:\/\/kerneltrap.org\/files\/linus2.gif\">linus2.gif<\/a>, <a href=\"http:\/\/kerneltrap.org\/files\/linus3.gif\">linus3.gif<\/a>\n\n        Three pictures of Linus Torvalds, showing what a despicable\n        figure he is in real life.  The beer is from the pre-Linux\n        era, so it's not virtual.\n\nIn nic.funet.fi: pub\/OS\/Linux\/doc\/PEOPLE.\n\n--\nLars.Wirzenius [email blocked]  (finger wirzeniu at klaava.helsinki.fi)\n   MS-DOS, you can't live with it, you can live without it.<\/pre>\n<\/blockquote>\n","protected":false},"excerpt":{"rendered":"<p>This is a article on slashdot taking a look at the historical Linux Kerel 0.01: LinuxFan writes &#8220;KernelTrap has a fascinating article about the first Linux kernel, version 0.01, complete with source code and photos of Linus Torvalds as a young man attending the University of Helsinki. Torvalds originally planned to call the kernel &#8220;Freax,&#8221; [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3,13,28,35],"tags":[],"_links":{"self":[{"href":"https:\/\/ryanorser.com\/index.php\/wp-json\/wp\/v2\/posts\/134"}],"collection":[{"href":"https:\/\/ryanorser.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ryanorser.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ryanorser.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ryanorser.com\/index.php\/wp-json\/wp\/v2\/comments?post=134"}],"version-history":[{"count":0,"href":"https:\/\/ryanorser.com\/index.php\/wp-json\/wp\/v2\/posts\/134\/revisions"}],"wp:attachment":[{"href":"https:\/\/ryanorser.com\/index.php\/wp-json\/wp\/v2\/media?parent=134"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ryanorser.com\/index.php\/wp-json\/wp\/v2\/categories?post=134"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ryanorser.com\/index.php\/wp-json\/wp\/v2\/tags?post=134"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}