Hello. I wrote a multitasking 16-bit real mode "operating system" that works on every IBM PC compatible computer, and a TCP/IP stack for it. Then I wrote an HTTP server for it.
"Tämä palvelin käyttää graafista 16-bittistä lEEt/OS-käyttöliittymää. Järjestelmä on yhdellä 1,44 megatavun 3,5 tuuman levykkeellä. Tämä sivusto on kiintolevyllä. BBS on 360 kilotavun 5,25 tuuman levykkeellä. Vieraile myös BBS-purkissa portissa 486 (telnet)."
Translated:
"Server uses a graphic lEEt/OS-user interface. The system is on a single 1.44 MB 3.5 floppy disk. This site is on a hard drive and the BBS is on a 360 KB 5.25 inch floppy disk. Visit the BBS on port 486 (telnet)."
We used to serve serious traffic off 486 machines, so if anything it's probably a software issue. Perhaps FreeBSD/i386 would be an appropriate choice?
If you weren't there you probably don't realize that the 486 was a huge leap over the 386. We don't get 100% generational improvements these days. The 486 enjoyed a long life and its later incarnations were giving contemporaneous Pentium models a run for the money, and I'm not even counting socket-compatible upgrades from AMD and so forth. You could put 64MB RAM and big L2 caches and there were PCI motherboards in the later 486 years.
Consider that the AMD Geode was basically the last 486 standing, and it was (is) more than adequate for routing between or firewalling fast ethernet links, serving HTTP etc.
My system is 100% 16-bit code and cannot access more than 640 kB of memory, and that's why it is so limited. I could probably increase the maximum amount of sockets and file handles to give it more capacity, but it still has its limits.
Firing up EMM386/JEMM386 underneath this environment, or writing 32-bit code, may go against the 8088 spirit of the project. A physical EMS card is an expensive pain to obtain, and you'd probably want to speak to its hardware directly rather than loading a DOS device driver, but it would be period-accurate :) There's old ones on eBay and modern replicas like https://texelec.com/product/lo-tech-ems-2-mb/
You can do virtual memory above the 256kb mark with the most advanced 80s cards but they're even rarer (I think DESQview worked best with this setup, and its what the 386+ software EMM implementations give you). For regular EMS which only works in a single 64kb region, disk caching and RAMdisk were common use cases, which didn't require rearchitecting the OS or applications to understand a new addressing scheme.
On 286+ you can also call a BIOS function to copy to/from extended memory, using only 8088 instructions in your own code, but of course the BIOS code will rely on newer processor instructions to make it happen. http://www.ctyme.com/intr/rb-1527.htm
Aside: cool project! I wrote a protected mode bootloader for old PCs recently and that was quite enough work!
Yep this! People would regularly run windows 95 on a 486 with 8-16mb of ram. This was their daily driver which did word, dial up/aol/prodigy, messaging, games, etc. I think the reaction here that someone is able to run a little web server off of it is perhaps a bit overdone. Yes, its impressive he wrote his own stack, but the hardware itself is still beefy.
Yeah, a 486 is not a slow CPU - not even the 25 MHz SX version that the server has. But Windows 95 is a 32-bit protected mode OS. My OS also works on a 8088, but I don't have a 8088 computer that I could use as a server.
Right now I cannot even access it locally from my lan, but it does answer to some of my pings. The HDD led is also blinking, which means that it is in fact answering to some HTTP requests. The TCP/IP stack is compiled for 64 simultaneous sockets.
Can't connect but the OP put a video[1] up of the system ~4 months back. Looks like it might be serving content direct from 3.5 and 5 1/4 floppies which might explain the lag :D
Not only do you not get a choice, it benefits no one but Intel & the three letter agencies they are in bed with. Tanenbaum himself has expressed regret for the way it ended up being used:
"Many people (including me) don't like the idea of an all-powerful management engine in there at all (since it is a possible security hole and a dangerous idea in the first place), but that is Intel's business decision..."
Isn't it BSD [1]? Anyway it became BSD only in 2000. It was $69 before that year. Of course everybody started using Linux because it cost zero. Linux didn't end into Intel's CPUs probably because its GPL.
I skimmed the article which I don't hold in high regard for its word choice.
I think license choices will bite people, because they have to be made in advance, but nobody's certain of the future. Maybe my thing would not have been popular anyways, but it have been useful for some, so it wasn't a great idea to make it proprietary. Maybe my thing turns out to be beyond useful, so many profit from it, and I still live a modest life while fixing its bugs. The BSD wasn't a great choice then.
So I think, with license choice, a big thing is regret. And each license is also a political statement, especially the case with GPL I feel, with its strong ties to the ideologically driven FSF. These people want to build a world on those foundations, so they think that if people take but also give back, that'll be sustainable.
At the end of the day, Tanenbaum was both fooled and he wasn't. I absolutely empathize with him as a human. But he explicitly allowed for this kind of incident with his license choice.
Jan 2001 was the first month I hit $1mil in revenue from our website. It was served from a Pentium P5 beige desktop box colocated in PAIX.
Actually, there were 3 of them. 1 running Apache and Perl FastCGI, one running MySQL, and a third which mostly ran backups, but could be used as failover for either the web server or database if required. I used to fly from Sydney to San Francisco 3 or 4 times a year with half a dozen hard drives in my carryon, because that was the most reliable way to do major upgrades - we had three identical boxes in the office in Sydney, and would install/configure/test major software and dependancy upgrades in house, then go to the data centre and swap in the new drives one machine at a time with zero downtime - usually. I was rarely the only one in my datacenter aisle with a screwdriver and a PAIX guy looking over my shoulder, but most other people were swapping out whole rack mount servers, not opening them up to replace or upgrade components.
32-33% margin after credit card fees. We were doing great, and totally full of ourselves. We turned down a buyout aisle we thought we were worth 10 or 20 times what they offered. Then Sept 11 happened and our revenue crashed 90% overnight. :sigh:
+1 for this lovely metaphor. I'm Estonian, but I absolutely love Finns for their peculiar between-the-lines humor, and their tendency to go really deep into fringe stuff.
A Finnish guy once demonstrated a retro bicycle he was restoring, stating that it's going to take him two years to finish it. "This needs to be done properly," he said with a barely noticeable smirk.
Re: Finns, demoscene, and frugal computing: see also Viznut and his insightful essays: http://viznut.fi/en/
Unrelated 486 story: I used a 486 66 dx2 as my computer until 2001 when I went to college and used my grad money for an actual computer. Get to school and they limit the internet to 1 gig per day. Discovered it’s by MAC address. Not by LAN port. So thanksgiving break grab that bad boy and drag it to school. It ran FreeBSD and I made a SOCKS proxy that just changes it’s MAC after about 1 gig of usage. Have it out to everyone on our floor and we destroyed Kazaa and Limewire. Good times.
Did you use Links and Pine too? Because reading web pages over Links/Lynx was still possible in 2001. FVWM, Urxvt, Lynx and ImageMagick for images would fly as a daily machine.
I (fairly) recently installed modern Gentoo onto my 486DX2-66 box. I think it has 32MB of RAM in there. Boots and works fine for the most part. Compiled tools and utilities work fine for the most part, but trying to run any interpreted code takes ages.
I should put up a webserver on there and see if it can serve something!
I should give that a go, yeah. The gentoo attempt was mostly to see how a modern desktop class linux distro would work on a system that old. Answer: Not very fast!
Same with storage. This laptop has a few times more RAM than my first PC had disk space. And in turn, I've used servers that had more RAM than my laptop today has SSD space.
As you get older, the differences just becomes larger and larger. At some point it just gets ridiculous. My current laptop has almost 1 million times more RAM than my first computer (40 GB vs. 64 kB).
It's just impossible to compare the numbers when the differences are that large.
And of course, a post like this is not complete without me noting that the response times when pressing a button on the keyboard was vastly faster on my C64 than my modern machine.
> And of course, a post like this is not complete without me noting that the response times when pressing a button on the keyboard was vastly faster on my C64 than my modern machine.
No numbers are given for the C64, but the timing for the CBM4016 (with quite similar firmware/BASIC) should be similar. The Apple 2 input latency is even lower. Perhaps this is related to the fact that the Apple 2 firmware didn't use interrupts and polling might have been more efficient in this case.
I did the same thing with an AM5x86-133 based industrial computer (the SoC is an AMD Elan SC520) with 32 MiB of RAM. I found it actually quite painful to get a kernel config together that wouldn't OOM the system at boot (for the current upstream kernel). I just barely squeaked by with all of the cgroup and netfilter options OpenRC requires, the ethernet driver, and the legacy ISA IDE driver. I should probably change the optimization settings to -Os rather than -O2 though. I ended up starting with tinyconfig and working forward from there.
I actually have two of them (from different vendors) with the same SoC. One has 32 MiB of RAM soldered on that I can't upgrade (a Kontron board), the other has a SO-DIMM slot (a WinSystems board). So $5 and some eBay sleuthing brought it to 128 MiB. As for the former, I don't have schematics, so I'm a little uncomfortable just soldering another SDRAM chip to it and seeing what happens.
Only thing I was a bit sad about was that I spent the time figuring out how to change the CHOST on Gentoo to i586, only to discover that the AM5x86 is a 486 based core...
I remember when I had an AMD 5x86-133 (branded like a AM486-DX5 133) as my computer... these times playing DooM 2 and the demo of Star Fleet Academy at slow motion...
My first Linux install was a big pile of 3.5" floppies downloaded over my (well, my parents) 9600 bps modem containing Slackware that I installed to a 486dx2-66 with 8 MB RAM. With that 8 MB I was even able to run Xfree86 and an xterm before it started swapping!
That was the time before PnP ISA and kernel modules, so to get the sound blaster card to work one had to specify the IRQ (and I/O port address?) in the kernel config and recompile the kernel. Good times!
I think the user will most probably keep pressing the F5/Refresh button anyway if the site is not working at the first try, so responding with a RST packet would just use more bandwidth and resources.
Looks like the server is asleep since no one requested for a page recently. I'm constantly refreshing the page until I receive a response, just to prime it for my fellow HNers in case this reaches top of HN.
Are you still working on this? I fired up my spider on ultra aggressive retry mode because that will help the DNS get cached for people in my isp. (They have funky cache settings). This should help thee Ed time to first byte for fellow HN neighbors.
I had a 486 server once. It was Novell NetWare 3.x running a LAN for a small nonprofit. Word Perfect, email, listserv, accounting and web access. Pretty sure I would never have exposed it to HN though (had it existed)...
I remember seeing a website years ago that supposedly ran on Minix on a 286. Someone had fired that up because... well, because.
I don't think it was fast, nor did it probably serve any purpose apart from existing and possibly serving some information about the software it was running.
Novell was actually quite efficient and responsive. Everything ran in ring 0, right next to the hardware. Which is also why you never applied any patch other than one from Novell...
Something close. In the end of 80's I had preemptive multithreading and scheduling right inside my old DOS program. Had to switch timer interrupt frequency to 4kHz for that.
I'm very interested in the network stack, having explored it for a while for https://github.com/akkartik/mu before giving up. What sort of network card do you support?
Everything in my "operating system" is 16-bit x86 code. It uses regular DOS packet drivers. I have also started writing my own DOS kernel, but it is not ready yet. The server uses FreeDOS kernel. That's why I write the "operating system" in quotation marks.
And because my TCP/IP stack is 16-bit code, it probably won't work for your system. It's just a DOS program that has an interrupt service routine that the other programs can call.
Not a whole lot of context or detail in that, it could be at the peak of the effect or at some other point in time (even just bau, or an unrelated dos)
From memory as a rough estimate: When I had traffic influx from Reddit and HN it peaked at around 10 page views / second. Maybe 50k views in total including long tail?
Considering that it has to be able to handle about 100 new sockets per second, one socket requires about 1 kB ... 2048 kB (?) of memory depending of the size of the buffers and how the congestion window is implemented[1], I'd say that it would need at least dozens of megabytes of memory and fast I/O. Maybe more depending of the size of the content in the server.
Also not all TCP/IP stacks close the socket properly, so the socket cannot just be removed from the memory immediately after sending the page. There will always be sockets that are just waiting for a timeout.
[1]my 486 server does not have any TCP congestion control at all - it just sends one TCP frame and waits for ACK before sending the next frame.
It doesn’t really take a powerful server to sustain HN traffic (tens of thousands of requests over a few hours). The problem is that most web server software is really inefficient. A 486 theoretically is capable of handling HN request load, it’s just not being used well.
This sounds like something a madman would do, and certainly 16-bit real mode is insane, but back in the mid-late 90s I would think a large number of Internet servers were 486s.
I know I ran a major "topsite" for most of the core warez groups in around 1996 from a 486 and it handled a ridiculous number of connections. It was probably running BSD rather than Linux in those days though as I remember BSD being more stable/better performing at the time.
123 comments
[ 3.5 ms ] story [ 187 ms ] thread"Tämä palvelin käyttää graafista 16-bittistä lEEt/OS-käyttöliittymää. Järjestelmä on yhdellä 1,44 megatavun 3,5 tuuman levykkeellä. Tämä sivusto on kiintolevyllä. BBS on 360 kilotavun 5,25 tuuman levykkeellä. Vieraile myös BBS-purkissa portissa 486 (telnet)."
Translated:
"Server uses a graphic lEEt/OS-user interface. The system is on a single 1.44 MB 3.5 floppy disk. This site is on a hard drive and the BBS is on a 360 KB 5.25 inch floppy disk. Visit the BBS on port 486 (telnet)."
If you weren't there you probably don't realize that the 486 was a huge leap over the 386. We don't get 100% generational improvements these days. The 486 enjoyed a long life and its later incarnations were giving contemporaneous Pentium models a run for the money, and I'm not even counting socket-compatible upgrades from AMD and so forth. You could put 64MB RAM and big L2 caches and there were PCI motherboards in the later 486 years.
Consider that the AMD Geode was basically the last 486 standing, and it was (is) more than adequate for routing between or firewalling fast ethernet links, serving HTTP etc.
You can do virtual memory above the 256kb mark with the most advanced 80s cards but they're even rarer (I think DESQview worked best with this setup, and its what the 386+ software EMM implementations give you). For regular EMS which only works in a single 64kb region, disk caching and RAMdisk were common use cases, which didn't require rearchitecting the OS or applications to understand a new addressing scheme.
On 286+ you can also call a BIOS function to copy to/from extended memory, using only 8088 instructions in your own code, but of course the BIOS code will rely on newer processor instructions to make it happen. http://www.ctyme.com/intr/rb-1527.htm
Aside: cool project! I wrote a protected mode bootloader for old PCs recently and that was quite enough work!
In the end I minimized the HTTPSERV.APP window so that scrolling down the text would not consume too much CPU time.
P.s. I used a 486 as a router for years, and even upgraded it when I found a Pentium Overdrive... which of course was vulnerable to the F00F bug...
[1] https://www.youtube.com/watch?v=Be01GLFP-bQ
I recommend downloading the bootable floppy image, unless you want to see the source code.
Professor Tanenbaum strikes back...
"Many people (including me) don't like the idea of an all-powerful management engine in there at all (since it is a possible security hole and a dangerous idea in the first place), but that is Intel's business decision..."
[1] https://en.m.wikipedia.org/wiki/Minix
30 years on and he was still upset I suppose
https://cs.vu.nl/~ast/intel/
I'm not sure how I feel about it yet.
I think license choices will bite people, because they have to be made in advance, but nobody's certain of the future. Maybe my thing would not have been popular anyways, but it have been useful for some, so it wasn't a great idea to make it proprietary. Maybe my thing turns out to be beyond useful, so many profit from it, and I still live a modest life while fixing its bugs. The BSD wasn't a great choice then.
So I think, with license choice, a big thing is regret. And each license is also a political statement, especially the case with GPL I feel, with its strong ties to the ideologically driven FSF. These people want to build a world on those foundations, so they think that if people take but also give back, that'll be sustainable.
At the end of the day, Tanenbaum was both fooled and he wasn't. I absolutely empathize with him as a human. But he explicitly allowed for this kind of incident with his license choice.
Edit: This also looks like a fairly Finnish thing to do. Thinking not only of Linux and hacking, but also their general demoscene culture and such things. See also: https://www.gamesindustry.biz/articles/2020-04-16-finland-re...
Actually, there were 3 of them. 1 running Apache and Perl FastCGI, one running MySQL, and a third which mostly ran backups, but could be used as failover for either the web server or database if required. I used to fly from Sydney to San Francisco 3 or 4 times a year with half a dozen hard drives in my carryon, because that was the most reliable way to do major upgrades - we had three identical boxes in the office in Sydney, and would install/configure/test major software and dependancy upgrades in house, then go to the data centre and swap in the new drives one machine at a time with zero downtime - usually. I was rarely the only one in my datacenter aisle with a screwdriver and a PAIX guy looking over my shoulder, but most other people were swapping out whole rack mount servers, not opening them up to replace or upgrade components.
32-33% margin after credit card fees. We were doing great, and totally full of ourselves. We turned down a buyout aisle we thought we were worth 10 or 20 times what they offered. Then Sept 11 happened and our revenue crashed 90% overnight. :sigh:
https://en.wikipedia.org/wiki/PAIX
+1 for this lovely metaphor. I'm Estonian, but I absolutely love Finns for their peculiar between-the-lines humor, and their tendency to go really deep into fringe stuff.
A Finnish guy once demonstrated a retro bicycle he was restoring, stating that it's going to take him two years to finish it. "This needs to be done properly," he said with a barely noticeable smirk.
Re: Finns, demoscene, and frugal computing: see also Viznut and his insightful essays: http://viznut.fi/en/
OS - FloppyFW: https://www.zelow.no/floppyfw/
Because ISP used PPTP as way to providing internet and i need to share internet on few machines.
I applied for my university using lynx on that 486. Worked ok(ish).
Here is me using it to log onto my webserver, it loads the SSH key from a 5.25" floppy: https://twitter.com/vkoskiv/status/1370116376166273025?s=20
You'll have http and gopher support granted. If libressl compile and run, place it under /opt, and maybe you'll be able to compile a gemini client.
It's just impossible to compare the numbers when the differences are that large.
And of course, a post like this is not complete without me noting that the response times when pressing a button on the keyboard was vastly faster on my C64 than my modern machine.
Related - the analysis on input latencies by Dan Luu https://danluu.com/input-lag/
No numbers are given for the C64, but the timing for the CBM4016 (with quite similar firmware/BASIC) should be similar. The Apple 2 input latency is even lower. Perhaps this is related to the fact that the Apple 2 firmware didn't use interrupts and polling might have been more efficient in this case.
I actually have two of them (from different vendors) with the same SoC. One has 32 MiB of RAM soldered on that I can't upgrade (a Kontron board), the other has a SO-DIMM slot (a WinSystems board). So $5 and some eBay sleuthing brought it to 128 MiB. As for the former, I don't have schematics, so I'm a little uncomfortable just soldering another SDRAM chip to it and seeing what happens.
Only thing I was a bit sad about was that I spent the time figuring out how to change the CHOST on Gentoo to i586, only to discover that the AM5x86 is a 486 based core...
That was the time before PnP ISA and kernel modules, so to get the sound blaster card to work one had to specify the IRQ (and I/O port address?) in the kernel config and recompile the kernel. Good times!
Assuming that one "TCP entry" means one socket, that's a lot of SYN packets...
Video from what it looks like on the server: https://www.youtube.com/watch?v=BVKjVyM53sg
I don't think it was fast, nor did it probably serve any purpose apart from existing and possibly serving some information about the software it was running.
And because my TCP/IP stack is 16-bit code, it probably won't work for your system. It's just a DOS program that has an interrupt service routine that the other programs can call.
What is the most retro computer that ever served traffic from HN's top page without going down?
Also not all TCP/IP stacks close the socket properly, so the socket cannot just be removed from the memory immediately after sending the page. There will always be sockets that are just waiting for a timeout.
[1]my 486 server does not have any TCP congestion control at all - it just sends one TCP frame and waits for ACK before sending the next frame.
CPU SH3/SH4a, Frequency of CPU 29MHz, RAM 64 Kilobytes
Unfortunately it didn't survive HN effect
I know I ran a major "topsite" for most of the core warez groups in around 1996 from a 486 and it handled a ridiculous number of connections. It was probably running BSD rather than Linux in those days though as I remember BSD being more stable/better performing at the time.
Believe it was something like 133mhz but it might have been 3 or 400mhz I just can’t remember. Also forget how much ram it had..
Amazingly freenas performed admirably for basic smb and nfs for all the time I used it..