I still hand this out to younger software engineers to understand the true principle of architecture. I have a print off of it next to my book on how this great new operating system and SDK from Taligent was meant to be coded.
I still hand this out to younger software engineers to understand the true principle of architecture. I have a print off of it next to my book on how this great new operating system and SDK from Taligent was meant to be coded.
Same question for the iphone. There are some link from HN where people saying iphone is dead bcs it does not support flash. But it didnt. Why it didnt?
İs performance really the only key factor when it comes to software design ?
But why linux won? We know now it won, but what is the reason. Tanenbaum was theoraticaly correct. İf HN exist back then, I would argue most devs here would say Minix will last longer, monolithics is indeed an old idea that had been tried and tested etc.
In every situation where a microkernel is used, a monolithic version would run faster. İs performance really the only key factor when it comes to software design ?
Usually people want software to do two things. The first is do what it is expected to do. The second is to do it as fast as possible.It seems to me that the microkernel idea came from observing that virtual memory protection made life easier and then saying “what would life be like if we applied virtual memory protection to as much of the kernel as we can”. Interestingly, the original email thread shows that they even tried doing microkernels without virtual memory protection in the name of portability, even though there was no real benefit to the idea without virtual memory protection, as you end up with everything being able to write to each other’s memory anyway such that there is no point,
Same question for the iphone. There are some link from HN where people saying iphone is dead bcs it does not support flash. But it didnt. Why it didnt?
Flash was a security nightmare. Not supporting it was a feature.If performance is second, it seems to be a very, very distant second for most uses. So much software is just absurdly slow.
This patch shaved a minuscule number of cycles off a hot code path, and was accepted on the basis that microbenchmarks showed that it made extremely hot loops run a few times faster:
https://github.com/openzfs/zfs/commit/59493b63c18ea223857066...
This patch eliminated a redundant calculation that used 0.8% of CPU time:
https://github.com/openzfs/zfs/commit/3236c0b891d0a09475bef8...
The impact of the following patch was not measured, but it is believed to have made checksum calculations run several times faster by eliminating unnecessary overhead:
https://github.com/openzfs/zfs/commit/59493b63c18ea223857066...
The reason why the impact was not measured is that the code runs with interrupts disabled, which makes it invisible to kernel profilers. Another way of measuring was needed to quantify the improvement, but everyone agreed that it was a good improvement, so there was no need to evaluate the before/after improvement.
Few people are willing to accept the performance impact of moving their filesystem driver into userland and practically no one wants the performance impact of moving almost everything into userland.
https://github.com/openzfs/zfs/commit/677c6f8457943fe5b56d7a...
This doesn't just apply to kernels. It applies to anything in software; writing a huge monolith of intertwined code is always going to be faster than writing separate components with clear API boundaries and responsibilities.
Of course, monolithic software ends up being less safe, less reliable, and often messier to maintain. But decoupled design (or micro-kernels) can take SO MUCH longer to develop and implement, that by the time it's close to being ready, the monolithic implementation has become ubiquitous.
BSD was mired in legal issues, the commercial Unix vendors were by and large determined to stay proprietary (only Solaris made a go of this and by that time it was years too late), and things like Hurd were bogged down in second-system perfectionism.
Had Linux started, maybe, 9 months later BSD may have won instead. Had Larry McVoy's "sourceware" proposal for SunOS been adopted by Sun, perhaps it would have won out. Of course, all of this is impossible to predict. But, by the time BSD (for example) was out of the lawsuit woods, Linux had gained a foothold and the adoption gap was impossible to overcome.
At the end of the day, I think technical details had very little to do with it.
Solaris, AIX, HP-UX, and UnixWare could all use a shot of BSD. I was playing with UnixWare earlier today. Time capsule.
Additionally, Apple and Sony have already taken what they needed.
Ironically, 386BSD would have been brewing at the same time with a roughly similar status.
All 3 projects, BSD/386, Linux and 386BSD gained recognition over the span of about 6 months in 1992.
I started running Linux in October 1994.
One of the main reasons I chose Linux over Free/NetBSD was the hardware support. Linux supported tons of cheap PC hardware and had bug workarounds very quickly.
I had this IDE chip and Linux got a workaround quickly. The FreeBSD people told me to stop using cheap hardware and buy a SCSI card, SCSI hard drive, and SCSI CD-ROM. That would have been another $800 and I was a broke college student.
https://en.wikipedia.org/wiki/CMD640
Linux even supported the $10 software based "WinModem" I got for free.
I was new *nix sysadmin, and I needed good NFS performance (replacing DEC ULTRIX workstations in an academic dept with PCs running some kind of *nix). I attended the 1994 Boston USENIX and spoke to Linus at the Linux BOF, where he basically told me to pound sand. He said NFS performance was not important. So I went down the hall to the FreeBSD BOF and they assured me NFS would work as well in FreeBSD as it did in ULTRIX, and they were right.
I've been a FreeBSD user for over 30 years now, and a src committer for roughly 25 years. I often wonder about the alternate universe in which I was able to convince Linus of the need for good NFS performance..
I had a summer internship in 1995 and the Win 3.1 machine was so unstable for running an X server to the Suns, 3270 mainframe emulator, and browser using the Win32s (environment for running 32-bit application on 16-bit Win 3.1)
We found the supply closet with over 200 old 486 machines. The other intern and I installed Linux on some and it worked far better than the Win3.1 setup. The older guys saw it and wanted one too. We set up an assembly line with a Linux NFS server with the Slackware disk images to avoid swapping floppies. At least over a 10 Mbit network we found the NFS performance to be fine.
A couple of years later at my job after graduation I convinced our manager to buy PCs to use as X terminals with larger monitors and move the Suns to the closet for the chip design jobs.
I remember having some NFS issues and Trond Myklebust (Linux NFS guy) had me trying some NFS version 3 patches that improved performance between a Linux client and Solaris server.
I remember in my intro operating systems class we learned that you could open a file for read or write and they had a file offset pointer etc. Then I learned that NFS (v1 and v2) were stateless. The joke I heard was that Sun servers were so unstable in the 1980's that the system was stateless so that it could crash and reboot and didn't need to worry about the client's file state.
My college used AFS (Andrew File System) and the DCE Distributed Computing Environment. It was great as a normal user being able to create my own ACL Access Control Lists of other groups of students and give them read access to some files and make directories for class projects and give another student write access to a single directory in my home dir. NFS with groups is so limiting in comparison.
https://en.wikipedia.org/wiki/Distributed_Computing_Environm...
I haven't used LaTeX in a long time but I was always impressed how it could make integral symbols over fractions with summations and everything else look perfect.
My favourite distro right now is Chimera Linux which is Linux/BSD hybrid of sorts.
He was only correct in a world where programmer and cpu time is free and infinite.
Also, microkernels only waste CPU time because modern CPUs go to great lengths to punish them, for no comparable gain for monolithic kernels, apparently because that's the design that they always used.
My understanding is that it's easier to develop drivers for a micro-kernel. If you look at FUSE (filesystem in user space), and NUSE (network in user space), as well as the work with user-space graphics drivers, you see that developers are able more rapidly implement a working driver and solve more complicated problems in user space than in kernel space. These essentially treat Linux as a micro-kernel, moving driver code out of the kernel.
With NUSE and FUSE, the kernel is very much going in between userland processes and saying “do things this way”. Microkernels do not have a monopoly on the idea of moving code into userspace. There are terms for other designs that push things into userspace, such as the exokernel, which goes well beyond the microkernel by handling only protection and multiplexing.
I think the term library OS has been proposed for what FUSE/NUSE do. It is a style of doing things that turns what were kernel functions into libraries that can either be accessed the old way through system calls redirected to daemons via shims or as libraries in the process address space. This is an extension of monolithic/hybrid kernels, rather than a microkernel. Closely related would be the anykernel concept as demonstrated through rump kernels, which supports the same code being compiled for both in kernel and in userspace uses:
https://en.wikipedia.org/wiki/Rump_kernel
Earlier work in this area can be found in OpenSolaris, where various kernel code were compiled both as userspace libraries and kernel modules. The most famous example is ZFS (it was/is used to make development faster via stochastic testing), but other things like the kernel encryption module received the same treatment.