Running Windows 98 in the Browser(copy.sh) |
Running Windows 98 in the Browser(copy.sh) |
My highlights:
- First version of Windows (1.01)
- SerenityOS <3
- and even ReactOS
In fact I got so in the zone that I pressed ALT-F4 to close Win98 notepad and shut down my whole web browser instead!
Sync primarily happened via either a hardwired serial connection or wirelessly via infrared. The infrared sync worked, but was finicky and required that the infrared sensors on your laptop and PDA be directly facing each other.
I only played with this after I'd graduated and started making enough money that I could buy used PDA's just to see what they were capable of.
Win9x (and I believe it started with Windows/386) are based on a hypervisor architecture with minimal protections. The Win32 environment is essentially a protected-mode DOS application that also runs its own application format, and is itself a VM, along with each "DOS box" that gets created.
> 95 and prior were literally running on top of DOS.
Not sure how you're gathering that the GP is contradicting this. Windows 95, 98 and Me are all architecturally the same: a protected-mode DOS app.
Running DOS from within the Windows shell is not the same as exiting or skipping the boot of the Windows graphical shell, and is running in VM86 mode (which as the GP points out existed in Windows/386 / Windows 3.0 Enhanced 386 mode) See Virtual 8086 mode for some more overview.
It's messy and weird, but progress. Windows NT operates differently and I don't think ever started from DOS.
https://en.wikipedia.org/wiki/Windows_95#Architecture
https://en.wikipedia.org/wiki/Windows_9x#Virtual_Machine_Man...
https://news.ycombinator.com/item?id=11155203 (356 points | Feb 23, 2016 | 165 comments)
https://news.ycombinator.com/item?id=23674012 (421 points | June 29, 2020 | 266 comments)
Many other pages don't load, possibly non supported https standards
And then I got a BSOD (Invalid VxD dynamic link call from VMM(06)+1D72 to device "C001" service E74) when I turned on the Underwater screen saver.
Technology has really come a long way since the olden days. (And I wasn't even there for the olden days!)
I discovered it while browsing the web and thought it'd be interesting to share it
The only functional improvements I can note over two decades are: Unicode support, higher resolution of everything (from hardware to content), and system reliability thanks to driver isolation.
Also, it’s kind of amazing that many web pages these days are larger than Doom shareware’s zip size.
Orthography and grammar checking was too slow. You had to press a button to check them, and it missed a lot of tricky cases.
There is no real reason OSes get more shitty with every version
The reason is that there’s profit to be squeezed out with all the additional bloat.
Fedora Silverblue was too heavy, but MX Linux made that computer run like my main. No slowdowns ever. Moments like this make me wonder who/what is leading us.
It's something of a Parkinson's law of optimization. The more computing power there is, the more clutter and less optimization will be had until we fill the computing power. When your hardware is a big limiting factor, performance becomes a primary concern.
I think there is also something to be said about the size of the project. Win98 was in the hundreds, 11 is in the thousands. I have found much harder to get the fundamentals right on a larger project than a smaller one. Responsibility is diluted, architecture creates more seams and redundancies, and coordinating people is more complex. On top of that, slap a product culture that favors form over function, and cramming in the largest feature list possible, and you've got yourself a modern OS.
But you can get a reasonably close experience with Linux or the BSDs and a simple GUI environment like the *box window managers. They're modern and snappy even on things like older generation RasPis.
1. Bad abstraction, causing the moral equivalent of N+1 queries in UI code. For example, modify one thing, causing layout, moving something else, causing layout, moving something else, causing layout, etc., etc., until it is all recalculated and re-laid out, and then allowing the paint.
2. Hidden serialization of asynchronous processes, essentially causing tiny pauses throughout the main thread.
I think this is one reason why people are so impressed with IMGUI. They imagine that the UI code must be doing an incredible amount of work to feel so slow, but then they watch a similar IMGUI app build and display the whole UI every frame 60-120 times per second, with plenty processing power left over. But if the other frameworks weren't wasting clock time, they could feel plenty fast.
You can get a good feel for what is really slow by using a very slow computer. The original Macintosh feels snappy, but it is doing one process in black and white. It's not hard to reach 30fps. When you take System 7, and put it on a 16MHz 68020 with half a memory bus (Mac LC), and run it at 16-bit color, painting those windows takes a long time. Our trick back then was to jump to black and white when we needed to get things done quickly, then back to higher bit depths when we wanted color or eye candy.
Now we have a situation where we can output full screen 24bit color in a millisecond or less, we are waiting on other things.
Why is it surprising that an old OS built for late 90's hardware runs "comically fast" on 2020's hardware?
Just look at XP system requirements:
- Pentium 233-megahertz (MHz) processor or faster (300 MHz is recommended)
- At least 64 megabytes (MB) of RAM (128 MB is recommended)
- At least 1.5 gigabytes (GB) of available space on the hard disk.
How would anyone expect that not to be much faster on a modern quad+ core, 4GHz system with 8GB+ RAM?* realtime collaborative spreadsheet editing
* 28 inch high definition monitor
* watching movies in HD
* playing almost lifelike games
* browsing an extremely hostile internet
* live backing up all my files
* Running large complex scripts on the same machine I can easily carry in one hand
* Running an IDE like JetBrains
I could go on. We are only doing the "same tasks" if you ignore a lot of the details.
It ran, but it was quite slow. Windows 2000 managed better. Windows 98 even more, but internet on Windows 98, maybe not the best thing to do. Linux even more.
I can't see 233 MHz and 64 MB being reasonable minima, more like very bare minima as in "it boots".
(of course, this does not contradict anything essential from your comment)
It's not a given.
For example, Windows XP may boot faster than 98 or 2K on the same hardware, because XP parallelizes and shortens some hardware initialization steps. (e.g. anything related to the network).
Win98 with file sharing spends almost a minute during boot (even from an SSD) just squeaking netbios frames.
NT is very much a traditional OS architecture in comparison.
It's easy to confuse the bad performance of old software with the hardware it's on. But really a lot of the trouble is that the solutions we had to software problems back then are primitive and naive compared to the current state of the art. There's no reason that current software design practices can't massively improve older systems.
Hell, just try installing a modern Linux on an ancient PC, you'll see what I mean. Even considering that the hardware is physically slower, your experience is much, much closer to modern computing than 98 could ever hope to achieve.
From your own reference: To end-users, MS-DOS appears as an underlying component of Windows 95. For example, it is possible to prevent the loading of the graphical user interface and boot the system into a real-mode MS-DOS environment.
You can even try this in the linked VM: Shutdown and Restart in MS-DOS mode. That is a real mode DOS without any Windows running. This was often necessary for games and other heavyweight protected mode DOS applications like CAD/CAM at the time that would not tolerate running in the VM86 environment.
That sounds handy. A bit like the TTYs on most unix-like systems (I don't think macOS has them).
What you really mean are plain text mode consoles for which most UNIX likes further extend this to allowing multiple "virtual" consoles to share one display. And MacOS does have text consoles (see video_console.c in the darwin source), they are just not usually used and very hard to get to especially in Apple Silicon era macs (older macs can easily be booted in single user mode with Cmd+S)
But this is still not at all analogous since it's still the same OS underneath. Windows 95 family was a virtual machine manager launched from DOS so booting into DOS means not loading it at all. The issue for compatibility wasn't so much the graphical shell part as the VMM (virtual machine manager).
You have a config error in TCP/IP.
That's how minimum specifications work. They're the minimum to run the OS, but nothing else.
Win11 has minimum requirements of 4GB of RAM but I doubt it can run anything with that.
I'm failing to see the surprise. Isn't it a a given that old SW runs faster on modern HW when you factor in how far HW evolved since then.
It's not just that Win98 runs faster on modern hardware. It's that it does the same--or at least similar, as far as the user is concerned--tasks as Win11, but faster.
That leaves a gaping hole of "what was so important to add to the OS that it warrants slower interactions at every turn".
I opened the settings app on my work computer running Win10 the other day and it took a good 5 seconds before it showed up and painted. On Win-anything-less-than-or-equal-to-7, the settings window opened immediately and navigating to different settings was also immediate.
So what is Win10/11 doing?
And Linux isn't immune to the bloat. It is still smaller/faster than Windows, but it has managed to stay within a constant factor of Windows all this time. Modern Linux is significantly fatter than 20, even 10 year old Windows.
If the answer were "corpos gonna bloat", what's Linux's excuse? Operating systems across the board have gotten bigger and slower over time, for little visible benefit, and nobody has a coherent answer for why.
- heavier use of serialized I/O means much lower risk of pointer corruption or related threats, but adds overhead
- so do simple safety/sanity/security checks - each by itself is harmless, but over 10-20 years they add up
- more abstraction layers and more bookkeeping to handle much more complicated hardware setups, or just the passage of time (a Y2K secure date field takes two more bytes, a 64-bit time_t takes 4 more bytes than a 32-bit one, etc.)
- userspace devs are as lazy as they can be. Gnome these days is mostly Javascript to make the constant pointless rewrites faster, something that would've been unheard of 20 years ago. (The *box WMs meanwhile are still as fast as before.)
Something can strike you without you being surprised.
For instance the amount of ads on youtube when it's running on a smart TV at someone else's always strikes me, but I'm not in the least surprised.
The surprising part is that in the intervening near-30-years of development, we have made software slower instead of faster.
Like, software bloat is totally a thing, but comparing Workbench to the Linux Kernel (let alone the entire GNU/Linux environment) is ridiculously naive.
Or since the subject is Amiga.
A 500 wouldn't make, but a A3000UX would.
Making use of what is cheap (hardware (CPU/ram) and network bandwidth) while avoiding to use what is expensive: programmers, tech guy helping you with an upgrade or a troubled windows install.
98's swap and caching agent was definitely not as good as 2k though. You absolutely had to reboot at least daily or the chance of hitting swap would only increase upwards.
That was Microsoft's biggest mistake regarding GNU/Linux adoption.
I only cared about Slackware in 1995, because Windows NT POSIX wasn't enough for university work.
All in all I respect the nostalgy, and see how many people would still be fine with these restrictions. I personally wouldn't want to go back to these day short of being paid a few trillions.
- full UTF-16 support, l10n was painful on purpose for licensing / differential pricing — Microsoft simply didn't want people in rich countries to grab MX/PH licenses and swap over to English/Japanese/other G7 languages. With the far more aggressive licensing schemes of XP and later that was less of a problem.
— Full IFS support, to allow arbitrary, high performance filesystem drivers. Win2k was just obsolete by the time those were mature enough to really use
— A full NT kernel with support for swappable userspaces. The POSIX subsystem was deliberately crippled by MS to fulfil federal requirements without allowing real interoperability, but nothing would've stopped them from doing a WSL1-equivalent BSD/Linux subsystem. (WSL2 would've been impossible simply because hardware virtualization for x86 didn't exist)
None of those features really need the full array of modern bloat, where even hitting the start button can take seconds to refresh all the adverts.
When I was a teenager, I wanted to see what was the maximum resolution my monitor supported. It was a Samsung Syncmaster 14" entirely analog, no OSD, with analog adjustment knobs on the bottom. The video card was a Matrox Millennium II 8MB VRAM and the OS was Windows 3.10. The maximum resolution that I could get was 1600x1200 @ 41Hz interlaced. That's almost 2K (1.92K to be more precise). 41Hz interlaced hurt my eyes like hell but everything worked on the software side.
Animations: NO, THANK YOU!
Font rendering quality: It increases with font size, which is needed for high res displays. Besides, current font authors don't waste any time doing manual font hinting like the old fonts had. Good luck having crisp font rendering without manual hinting! It's all just a blur since antialiasing was introduced.
Huge images: How huge? Win95 without any patches can allocate 500MB to a single program (image viewer). That's 170 megapixels @ 24bit-color.
Only if you run it on Linux through para virtualization; in which case it's using the host's kernel. Potato/potato.
The fact that it supports virtualizing an entire other OS in a safe and privileged manner should just further reinforce why the kernel is larger. But ok, got me.
> 8MB GUI-less image
Sure, and you can see all of the contents of that here:
https://github.com/linuxserver/docker-baseimage-alpine/blob/...
Let's just pick a few things from that:
curl - a library that can handle full bidirectional HTTP communication in Unicode, including via SSL/TLS and arbitrarily manage file streams *or* utilize linux's built-in piping/redirection functionality
ssl - a full suite of cryptographic libraries and keys to allow secure communications and integration into other libraries/code (the aforementioned curl, for instance)
onigurama - a full regular expression library for use in other programs (language VMs like Ruby, for instance)
musl - a libc runtime and it's standard library
zlib - in-built compression functionality utilized by gzip, png and others
Can you point to a base install of workbench being able to do all of that? About the only thing in the alpine base layout that it is directly comparable to is BusyBox+bash.> Part of it is elf header size vs hulk. Part of it is that no one bothers stripping symbols. But the reason for both of those reasons is simply that memory isn't scarce so we are lazy/efficient.
This is just some old guy "bah humbug" rant/conspiracy. Your Amiga with workbench is nowhere comparable to modern hardware+OSes. It can do somethings similarly, if you squint appropriately. At a much degraded image fidelity, color quality, insecure, primitively multitasking and non-networked manner with heavy RAM and CPU constraints.
I fully acknowledged software bloat is a thing. But we're not comparing some half-ass coded Electron app to some sleek handcoded C/C++/Rust desktop app. You're comparing base software built by decently-well educated engineers that does inordinately more than the comparison set, by so much moreso that it's ridiculous on its face. And then going on a rant about debug symbols and ELF headers (which brings a ton of benefits itself).
In an application like Teams, the delay between striking a key on the keyboard and the corresponding glyph appearing on screen is comically bad - two orders of magnitude higher than performing the equivalent action on a computer from the early 1980s.
I can run a full virtual music studio on my Mac, with tens of channels, each with a collection of plugins, and multiple samples and audio files streaming off SSD at the same time.
None of that is GPU accelerated - except maybe the UI, which is split across three 4k monitors
On Windows 95 I could barely play a single WAV at once, and a dual monitor system was an exotic luxury.
Hardware has gotten a lot faster, and the software can do more without crashing. (Mostly.)
The real problem has been the move to browser+cloud for productivity applications. The OS is a front end for the browser, which is a front end for remote compute. This is hugely slow and inefficient compared to making everything work locally, and perhaps including some cloud-ish hooks for sharing.
Yeah, it felt faster than today's equivalent at similar task, but at what cost.
If I strip out the catalyst, locks, interior and seats form my car, it will also go faster and give me better fuel economy but that doesn't really make it usable for me now.
People were educated about cyber-risks in a real-life, non-corporate-bullshit, non-give-me-a-break-eyes-rolling way.
And then they installed Tiny Personal Firewall which was miles better than even current windows' firewall.
No it wasn't, no they weren't. That's like saying that growing up in a rough neighborhood where you can get shot, or getting drafted into war, is good for you because it builds character and teaches you to protect yourself.
A bullshit OS full of security vulnerabilities is no fun or useful for any user or business. Yeah, it indirectly helped me in my childhood better understand security, threats and troubleshooting, but overall these faults were a net negative for humanity.
>And then they installed Tiny Personal Firewall
No they didn't. I did tech support at the time. Most XP PCs has whatever bullshit solution from Zone Alarm, Kaspersky, McAfee, etc was cheaper or more advertised at the time. If they had anything to begin with that is, otherwise they were full of Bonzi-Buddy, Strip-Girl animated spyware that came with your DivX player installation or via the usual 'Eminem - Lose Yourself.mp3.exe' Limewire download.
> \* realtime collaborative spreadsheet editing
> \* live backing up all my files
These are broadband adoption and bandwidth issues and don't explain why the OS has grown. We had real-time networked apps in 1998. We had networked file-sharing and backups. > \* 28 inch high definition monitor
> \* watching movies in HD
> \* playing almost lifelike games
> \* Running large complex scripts on the same machine I can easily carry in one hand
> \* Running an IDE like JetBrains
These are hardware scaling issues and don't explain why the OS has grown. And we had IDEs in 1998. > \* browsing an extremely hostile internet
Better sandboxing of the browser explains (though only partially) why the browser has grown, but doesn't explain why the OS has. If anything, the browser grew (in functionality and thus size) because the OS didn't (in functionality), so why did it (in size)?Because the same kind of sandboxing happens on OS level now as well. In Windows 9X days the apps could access the hardware directly but not anymore for safety and security. Everything is now layers upon layers of sandboxing that must talk to the HW via APIs.
>because the OS didn't (in functionality)
Didn't it though? Or are we being needlessly snarky?
I don't remember Win 98 having on-line automatic OS update and automatic driver update, firewall, heuristic anti-malware, DirectX 12 support(check the featurelist compared to DX 5), support for multi-core 64bit CPUs, PAEX, NVME SSDs, WiFi, multiple high-dpi screens, virtualization(Hyper-V), USB4 & Thunderbolt, accelerated fancy transparency in the GUI, etc.
Yes, some of those features are hardware related, but having the OS support all those new HW features and exposing it reliably and securely it to the userspace adds bloat in from of binary code that makes all that work seamlessly.
All of those features and support for all that newer faster hardware, are a given now but were unheard of in consumer OS back then when PCs had the complexity of a toaster by comparison.
So let's stick to the facts, not emotionally driven rose tinted glasses.
> so why did it (in size)?
Because as HW became powerful and cheaper, it made it less profitable for SW companies to hyper optimize everything like they were dong in the Win9X days with assembly and stuff. It would be a needless expense that brings no ROI.
Yeah Win11 is needlessly overbloated compared to WinXP, but people said the same about WinXP when it launched, compared to Win98, and they said the same about Win95 when it launched, compared to DOS. Where does the buck stop? At the Altair 8800? Pretty sure that had no bloat.
> * Running an IDE like JetBrains
We had Visual Studio, which also worked great, and with WinForms was undoubtedly one of the best GUI app development tools of all time.
> * browsing an extremely hostile internet
I did this well into the 2000s, although I was an early Firefox evangelist and mostly used that when it came out, plus eventually NoScript as JS was continually used to enshittify the web.
Really, entering in some coffe shop coding sessions, is hardly any different from an IBM X Windows terminal into a DG/UX session in the university computer lab, now they are using a laptop and something else instead of twm or an ambar based text terminal.
On the other hand, extracting a CD and compressing it's .wav to .mp3 was a whole day of computing, and sending the files as attachments through SMTP was enough to elicit flowery vehement objections from my university's sysadmins and my friend's small ISP alike...
But it was the IBM Aptiva K23 (basically this https://www.youtube.com/watch?v=sEhYumJiEbY ) with 12MB onboard. Later upgraded to the K6-2 (500?) with a real speed bump.
Of course by the time you get to the Core architecture you're in the opposite situation where Sandy Bridge is at 16 FP ops and 6.2 integer ops per clock cycle.
The whole industry was had more attention to performance and resources consumption.
The more things change....
OK they don't complain as much about 500kb attachments, but a lot of corporate direction for 20 years is about stopping that behaviour
Either way, I played mp3s in winamp while on IRC and sometimes even running netscape. Took at least an hour to get a mp3 though, and I had to throw them all out when I got decent speakers and could hear how terrible they sounded.
That was often due to driver support, some hardware not performing as quickly (or sometimes not being as stable) under generic OSS drivers compared to their behaviour with the manufacturer's proprietary binaries (which were quite likely not available for Linux at all). It could be very hit-and-miss, with two otherwise very similar machines performing quite differently due to one controller on the motherboard. Sometimes it was due to the generic driver not knowing for sure that a given device supported faster modes well so erring on the side of caution, a not uncommon example being a drive/controller combination ending up running in PIO mode or an old DMA mode despite supporting something much faster, in which case you could get the performance back with a little “magic” configuration manually telling it to use that better mode.
Generic drives in Windows often had the same problems, but manufacturers tended to make device-specific drivers readily available (usually in the box) for those OSs.
Other times it came down to differing defaults for things like cache modes (write-through or write back, etc), power-saving options, and so forth, which again could be tweaked with config (though the discoverability of these config options was typically not very high).
I find it very disappointing some people are still fighting Wayland which, while not perfect, at least tries to get Linux desktops graphics stack 'on par' with macOS versions from 20 years ago...
Works fine enough, and I use it occasionally to this day (though it is replaced by other things for many tasks these days).