Porting Modern Windows Applications To Windows 95

Windows 95 was an amazing operating system that would forever transform the world of home computing, setting the standard for user interaction on a desktop and quite possibly was the OS which had the longest queue of people lining up on launch day to snag a boxed copy. This raises the question of why we still don’t write software for this amazing OS, because ignoring the minor quibbles of ‘security patches’ and ‘modern hardware compatibility’, it’s still has pretty much the same Win32 API as supported in Windows 11, plus it doesn’t even spy on you, or show you ads. This line of reasoning led [MattKC] recently to look at easy ways to port modern applications to Windows 95.

In the video, the available options are ticked off, starting with straight Win32 API. Of course, nobody writes for the Win32 API for fun or to improve their mental well-being, and frameworks like WxWidgets and QuteQt have dropped support for Windows 9x and generally anything pre-Win2k for years now. The easiest option therefore might be Microsoft’s .NET framework, which in its (still supported) 2.0 iteration actually supports Windows 98 SE, or basically within spitting distance of running it on the original Win95.

An interesting point here is that .NET was never released for Windows 95 by Microsoft, which raises the question of whether there’s such a crucial difference between Windows 95 and 98 that would prevent the .NET framework from running on the former. As [Matt] finds out during his investigation, the answer seems to be mostly that Microsoft never bothered to fully test .NET on Win95 due to the low marketshare of Win95, ergo this just throws up an error message about an unsupported OS.

In order to get around this, [Matt] had to write his own .NET installer, which first led him down a maddening rabbit hole of the internals of the .NET runtime and its installer. That resolved running the custom installer on Windows 98, but even with custom function wrappers [Matt] was left with a series of exceptions to debug and resolve, including an SSE2-related one due to lack of SSE2 support in Windows 95. All of this without access to the JIT debugger that’d exist on Win98 and newer.

Eventually he did get it working, however, with the results available on the GitHub project page. Since backporting .NET 2.0 was so much fun, he next embarked on backporting .NET Framework version 3.5 as well, opening another series of .NET applications for running on an OS that’s now nearly thirty years old. Even if a practical use case is hard to make, it’s absolutely a fascinating in-depth look at what has changed over the past decades, and what we may have gained, and lost.

Thanks to [Jonathan Dziok] for the tip.

82 thoughts on “Porting Modern Windows Applications To Windows 95

  1. Windows 95 boot time: 2s to full operation. 99MHz 1st Gen single-core pentium with no graphics support, 8MB of ram and a couple meg HD.
    Windows 11 boot time: 1 minute+ to full operation. 4GHz i9 processor with oodles of cores, withmulticore NVidia graphics accelerators, 32GB ram and one TB HD.

    Well done @Microsoft – still doing the great job you were never famous for in the first place.

    1. In my memories it was more taking like 45 seconds on a computer with the specs you list… was barely usa le with 8 megs of Ram, and required a considerate amount of HDD for the time.

    2. There is something seriously wrong with your machine if it takes more than a minute to boot win11. Mine boots under 10 seconds.

      Oh wait, you wrote “TB HD”. Maybe ask someone with some knowledge how to spec out a computer in 2024 if you plan to run the latest software. Let’s see how fast win95 boots on a HDD from 1982. Also learn to lie better, win95 on periodic correct hardware took well over a minute to boot.

      1. 10 second windows 11 boot is actually a “resume from hybernation state”, it cam fail, and you can force it to skip that and then you get the few minute boot time, even with an SSD.

        1. A full forced restart takes under 15 seconds. Please show me any proof that win11 takes over a minute to boot with a semi recent CPU and an SSD.
          Even on my other 12 year old system it takes 7 seconds including the bios/efi, and again under 15 seconds from a forced restart. Last time I had minute long boot times was in the windows XP days on a pentium 3.

          Also why does it matter how it boots? By this logic, win95 being installed on the system is cheating, as it sets up a lot of thins during install! You have to install it from 0 including HDD format every time you want to use your computer. Bam, 2 hour long boot times.

          1. 2012 was 12 years ago. 3720QM combined with 16Gb ddr3 and a samsung 850 pro. with fast boot enabled and compatibility mode off in the bios (which skips most hw init/enumeration, thus the bios takes about 1 sec to hand over to the OS).

        1. Windows 95 RTM was 40MB in size (full installation via CD).

          And no, back then I didn’t found Windows 95 to be great nor revolutionary. I didn’t follow the hype.

          I’ve liked Windows 3.1 and its 2D interface much more. OS/2 2.x was equally nice.

          Even deleted CTL3D.DLL and CTL3DV2.DLL files because I didn’t like the then-new 3D concrete look.
          After deleting them, Windows 3.1 Control Panel and other applications had that friendly, old 2D look again.

          The Windows 95 look was waaay to late 90s and bland, I think. By contrast, early 90s was still a bit like the 80s, design wise, which was cool.

          Anyway, just saying. My opinion isn’t important whatsoever, but I’ve lived through these times, so I feel the urge to share this information.

          1. The revolutionary thing about Windows 95 was the introduction of a consistent and clean desktop paradigm that was nice for working between programs, instead of being geared for just using one program at a time (like Mac OS) or more “experimental” and expert-oriented desktops (Linux/UNIX DEs ) with their own idiosyncratic and obtuse manners.

            Win3.1 was still more just a program launcher, going back to times when your machine probably couldn’t do more than one thing. There’s very little provisions for task switching or even seeing what tasks are running. Background tasks and services that would appear as little icons next to the clock in Windows 95 are invisible and directly inaccessible in Win3.1 and even seeing the time requires you to launch a clock application. Launching another application requires you to minimize your current program window, open “Program Manager”, and then navigate through sub-windows to find the correct icon. The list-tree Start menu was a vast improvement over that.

            Of course, if you use your desktop environment as just a handy way to show multiple CLI terminals, or just having the web browser open, then all that is meaningless and things like task bars and start menus just get in the way.

      1. frankly revolutionary desktop UI change

        “revolutionary” by PC standards. The 1990s had loads of different desktop OS choices, as we were still figuring out how we would interact with computers in the home and at work. I was an Amiga guy and I remember thinking it was cute that PC had finally caught up, with a colour desktop, background art, and filenames longer than 8 characters. I also remember thinking “they need HOW MUCH RAM to make it happen?” I imagine the Mac and Acorn riscOS users felt the same way at the time.

    3. Are you sure you’re not thinking of Windows 3.1 instead of 95?

      My family upgraded their 486SX to a 120MHz Pentium and I remember being amazed that Windows 3.1 would start in seconds, maybe under a second. Can’t remember how much RAM, I think the 486 had 8MB and the Pentium had 32MB but I might be wrong.

      Then, we upgraded to Windows 95 (because I wanted to play Diablo!) and it would definitely take minutes to start.

    4. Most of boot time on my Win11 machine appears to come from memory training. When I switch off EXPO that gets it down to about 20 seconds. Also, being judicious about what should run on startup helps a lot. I distinctly remember my dad’s old PC took long enough to boot into Windows 95 that I would turn the computer on, make breakfast, and it would be ready to use by about the time it took me to finish eating. So I think you might be steering your own narrative a little bit here.

    5. My original Pentium box took a solid 5 minutes to boot Win95. Booting up was a “go get coffee” situation.
      My Win10 PC boots in under 5s.

      Also your GPU isn’t going to speed up your boot times, regardless of OS. Disk speed is the biggest bottleneck for most people. It sounds like you are running off an old HDD is it takes that long to boot.

  2. Windows 95 B (or OSR 2), to be pendantic. It needs IE and the USB supplement, according to the requirements.

    Simply being able to run those programs is great, but with non-trivial programs I bet there may be a problem with space. Win 95 was designed to run on really small machines and I wonder if this creates binaries that quickly run out of memory or hard drive room.

    1. It never “ran” on small machines, but was able to crawl in them. With lots of swapping if memory was low.

      But I agree that the original Windows Explorer of Windows 95 was very lightweight, in comparison to what came after.

      The newer Windows Explorer that had Active Desktop (part of IE4, because Internet Explorer essentially replaced old Windows Explorer) was quite sluggish.

      The Windows 98 Windows Explorer was equivalently heavy, but more stable, at least.

      That’s also why 98Lite and other projects had started many moons ago.

      Combining Windows 95 Windows Explorer with Windows 98SE/Me can give best of both worlds.

    2. The memory management of Windows 98SE was vastly improved over that of Windows 95.

      For example, it had the ability to run applications directly from VCACHE,
      if the applications were being alignment to 4K boundaries.
      So they didn’t have to be moved back into RAM first.

      There was a tool in Windows 98, walign.exe, which could help to align applications.

  3. I struggle to keep .NET app out of newer versions of windows. I never saw a decent app that requires .NET. Why would anyone try to run .NET apps on Win95. It would be the worst of both worlds.

    1. Windows itself has been built on .NET since Vista. Almost any application on Windows using native GUI controls since Vista has been .NET. If it is strictly Classic UI controls then it may be using a different compiler but there’s not much reason to.

      That’s like saying you’ve never seen a decent “app” that requires boost-cpp or gcc. Why does it matter how it was compiled and what libraries it uses as long as it runs efficiently?

      I suppose you’d rather run a Chromium instance in the background and build your GUIs in JavaScript with Electron or WebView2, right? Or deal with GTK or Qt with their _awful_ APIs?

    2. You obvious have no clue what .net is. It is a gigantic platform with a zillion good apps and you are probably using them without even knowing while still posting this comment.

  4. “Windows 95 was an amazing operating system… setting the standard for user interaction on a desktop…”

    Could replace “setting the standard for” with “creating a monopoly on”…. Let’s not completely forget the anti-competitive practices that kept down their completion. The FUD campaign against Linux. And I am sure am not the only reader who was forced to buy a Windows license they didn’t need or use because M$ forced hardware vendors to bundle M$ Windows.

    Also, Windows 95 was a crippleware version of Windows NT, with much of “real” OS stuff (like IPC/Named pipelines/etc) severely restricted.

      1. Are you suggesting the answer to that question would justify Microsoft’s anti-competitive practices?

        I would say that 1995 Linux was a threat to the future of Microsoft’s x86 OS monopoly. Although it took a couple more years for the MS PR machine to really ramp up the linux FUD (late ’90s).

        1. If there is no competition, can you be anti-competitive?

          In 1995 Linux was a potential threat to UNIX in computer science labs, but it wasn’t complete enough even for expert users to really do anything serious with it.

          The Microsoft-SCO FUD campaign was in 2003 and was targeted against using Linux on server machines by suggesting that it’s patent-encumbered. Ubuntu came out in 2004 – three years after Windows XP. In truth, Microsoft has never needed to campaign against Linux for the desktop, because it has simply sucked so much that they never found a reason to.

          1. > If there is no competition, can you be anti-competitive?

            Yes you can. That’s how you prevent competition in the first place!

            A couple of notes for MS context at the time:
            – FTC launched a probe into MS and IBM collusion in 1990.
            – By 1994 MS settled with the DOJ, agreeing to a consent decree stopping it from using it’s OS in anti-competitive ways.
            – In 1997 MS gets a $1M per day fine for violations of the consent decree.

            It goes on and on. Yes, SCO FUD didn’t start until ’00s, but there was linux FUD from MS before that. And, sure, MS didn’t publish linux FUD in 1995 (that I know of), but that is no reason to ignore everything else they did at the time, and before that and after that.

            Also, you are really focused on the word ‘desktop’, when I am saying ‘x86 OS’.

          2. >FTC launched a probe into MS and IBM collusion in 1990.

            But that was not about Linux.

            >but that is no reason to ignore everything else they did

            But that’s arguing past the point.

          3. > But that’s arguing past the point.

            No, that is the entire point. MS didn’t get to the top of pile by playing fair, and saying things like they are ‘awesome’ while ignoring their long running anti-competitive practices is effectively gaslighting.

        1. These people are confusing Linux with Unix. Pretty much every year after ’93 was “gonna be the year Unix becomes competitive on the desktop.”

          Didn’t happen until Apple put Unix on the desktop with OS X.

        2. True, it was barely more than a toy. Like Minix, just way more bloated (Minix 1 ran on 4,77 MHz IBM PC).
          A real Unix, like SunOS/Solaris or HP-UX was a completely different beast.
          On a commercial Unix, it was being possibly to get actual work done.
          Linux, by contrast, was more of a sect-like experience. Still is, to some degree.

          1. “Linux, by contrast, was more of a sect-like experience. Still is, to some degree.”

            I’m of the opinion that operating systems debates are the nerd equivalent of rednecks arguing whether Ford or Chevy makes the better pickup. I generally don’t engage in them.

            But your last remark tells me you have no idea what you are talking about. Do you run Linux? Probably not, and that’s fine, but I do…. on servers since 2005 and desktop machines/laptops since 2005…exclusively.

            In fact, there hasn’t been Windows-anything in my home for years, and the first thing I do when I get a new computer with Windows on it is delete it. Why? Because over the long run, the Linux user/ownership experience for me has been far, far better.

            I’m not part of a “sect,” I don’t care what you run on your hardware. But can we dispense with the Linux FUD?

        3. That’s your opinion. I switched to Linux at the time Win95 came out. I’ve been using Linux on my home computers every since. Windows 95 included a lot of crap but nothing useful. A Linux installation at the time included everything you needed at home – functional email client, browser, graphics editor (GIMP,) scanner support (Sane and XSane.) If you bought good hardware instead of the cheapest, the driver support was good. Linux “just worked” for me.

          I found Windows 95 useless and bloated and slow. As others have mentioned, it liked to randomly forget the network setup. We had one computer at work that was so bad with Windows 95 that we “downgraded” it to Windows 3.11 instead of fixing the network settings every week.

          1. “I found Windows 95 useless and bloated and slow. As others have mentioned, it liked to randomly forget the network setup. We had one computer at work that was so bad with Windows 95 that we “downgraded” it to Windows 3.11 instead of fixing the network settings every week. ”

            *Ahem* In the 90s, DOS-based networking was still common to see. Many Windows 95 installations ran atop on such existing DOS networks.

            I don’t think everyone was dependent on TCP/IP and RJ45 network cards – except the Linux gurus, since Linux essentially was a walking TCP/IP stack! So Linux is no argument, it’s user base is (was) totally biased here. IMHO.

            In practice, many PC users still were on dial up connection or ran coaxial networks using Novell network software.

            To give an idea, then-new Novell DOS 7 shipped in 1994 and had Personal Netware being included. It also supported Windows 3.1 and up.

            IPX/SPX as a PC standard continued to be relevant up until Windows 98 era, roughly.

            – Except to hardcore Linux gurus, of course, who loved to lament about POSIX compatibility, Unicode, case-sensitiveness, permissions, TCP/IP, OSI models, PostScript and VESA 3.0 graphics modes (=because no native drivers for good hardware). Ugh. 🙄

            The Windows 98 era was about same time that ordinary users had heard of DSL and network cards, I think.

        4. I downloaded Slackware at 1994 about 100pc floppy disk full distro :). I had terminal access to school call in (modem) terminal (some unix),.I installed there a slip (Serial Line Internet Protocol) to get internet home.. download was a large project :D

      2. I suggest you read the “Halloween Documents.” That will give you some insight into what uSoft itself privately thought of the threat Linux presented, and the extent to which they would be
        willing to screw their own customers to slow Linux’s penetration in the market.

      3. Are you suggesting that in 1995 Linux was a competitive and useful desktop operating system for the masses?

        No, but Workbench (Amiga OS) mac OS and riscOS were. Win95 was playing catchup in the 1990s.

    1. Many years ago, an HP employee, who was also ex-Compaq sys, came to the campus I work on to talk with the students about how to navigate the tech corp world. One student asked him about how difficult is to work with Microsoft. Our guest gave a great, comprehensive reply, ending with an anecdote on how Compaq, back in the 90s, bundled Netscape with a specific desktop computer release.

      The moment Bill Gates, that lovely brute, learnt about that he sent a small platoon of Lawyers to Compaq’s HQ throwing warnings and menaces —“I thought they were going to break our legs at some point”, our guest concluded.

      Never forget how Microsoft was built.

    2. I ran both win95 and NT 3.11 and 3.51 and dual booted then on the same hardware in some cases. Win9x and me had absolutely nothing in common with NT. 9x would boot in a few seconds, Nt took minutes and it have to check a drive because when it crashed it made a mess could take up to an hour. 9x could run in 4m ram no problem NT 16m was slow 12.8m is the least I ever got to run in. And I am in a technote some where for that.

      So no no no they are not the same.

    3. > Also, Windows 95 was a crippleware version of Windows NT

      Not quite. It was a GUI layered on top of MS-DOS – and a buggy one at that, with constant crashes.

      The first OS MS released aimed at consumers based on NT was XP.

      1. A common belief but it didn’t actually run on DOS. It *did* start a DOS VM but it snapshotted it and only used it as a template if you wanted a DOS session.

        Win 3.1 switched a lot to virtual 8086 mode to execute stuff like filesystem access in DOS. Win 95 handled it natively.

        It was buggy and crash though.

        1. “Win 3.1 switched a lot to virtual 8086 mode to execute stuff like filesystem access in DOS. Win 95 handled it natively.”

          With the exception of Windows for Workgroups 3.11 with enabled FastDisk.

          If WfW 3.11 has both 32-Bit File Access (Protected-Mode HDD Cache) and 32-Bit Disk Access (aka FastDisk, Protected-Mode HDD driver) enabled in Control Panel, it works same as Windows 95.

          It then filters MS-DOS int21h calls and is able to provide a seamless mouse cursor in a DOS box.

          In this constellation, DOS no longer is being called by WfW 3.11 or programs.

          Windows for Workgroups 3.11 was a real network operating system, not just a GUI anymore.

  5. I had a lot of disdain for Win 95 at the time, since I was an OS/2 & Linux user… then I read “Inside Windows 95” and gained a lot of respect for the design and implementation. The DOS subsystem was a lot more clever and interesting than most people thought.

    The registry has been trash from the get go though…

  6. Better coverage than toms they stated that .net was win98s most prominent feature, .net barely registered as an after thought on that platform. I think the article was written by a drunk AI user

    1. True.

      But there’s a catch: Windows 95 was able to run fine, given enough memory (16MB up) and contemporary hardware (plain ISA bus PC, including VLB; 386/486 processors).

      Unfortunately, many users didn’t have the right PC hardware at the time.

      They either had underpowered Windows 3.1 PCs (386SX, 486SX, 4MB RAM) or overpowered Pentium PCs (Pentium 133, PCI/AGP and ACPI).

      The latter was already Windows 98SE era hardware, essentially.

      Running old Windows 95 on that newish hardware wasn’t being going to work well.

      Because, Windows 95 RTM was being in development in early 90s (“94/95).

      The hardware back then was completely different. PCI was new, AGP didn’t exist.

      That’s also why Windows 95 had different releases. Windows 95 RTM, A, B and C (can’t remember the OSR numbers).

      Anyway, I’m not defending Windows 95 by any means.

      It was a pile of bad drivers, literally. Windows 95 was being constructed on VXDs, virtual device drivers.

      Windows 3.1 and Windows 98SE were a bit different here.

      Windows 3.1 also had been buolt using DRV files, because of 80286 code (Standard-Mode files).

      Windows 98SE had tried to move over to more stable WDM files, which Windows Me had continued to do (it removed many VXDs, unlike Windows 98se).

    2. That OS would randomly forget it’s network settings. And crash

      Oh man I still have PTSD from Windows networking in those days. I swear it made all the nerds worldwide a little bit dumber, as we applied the same settings 3 times and got 3 different outcomes.

  7. OS/2 was more modern at time.. but i started use linux at that time becose dos/win95 had no free driver for adaptec scsi card, and i loved linux virtual screens in smal display.

  8. .NET is a pain ever since. Took me days to install 3.5 to Win11 to run Schneider PLC programming software that depends on that nonsense. It can be installed only in emergency boot mode and with a big luck. If i own a company, i would fire anyone coding in .NET on the spot with passion.

  9. I went to one of the presentations that Microsoft gave when they announced .Net. After sitting through the whole thing, we walked out asking each other WTF .Net was supposed to be… other than a stupid-ass name.

  10. I’m looking forward to a port to Win32s or Win386 API (Watcom 32-Bit extender)!

    You know, that Win32 API for Windows 3.1x!

    I’m not kidding, Win32s had been successfully used for larger projects, such as running emulators – it can do more than running Freecell32!

    If it’s not possible for .NET v2 and v3.5 to be ported to Win32s, is there are chance for .NET v1 maybe ? 🙂

  11. “This raises the question of why we still don’t write software for this amazing OS”

    Because the only amazing thing about W95 was it’s success. Absolutelly not reliable, not stable, brought virus infections to completly new level, was getting sluggish every now and then so you had to reset it (or sometimes reinstall). I really liked it’s GUI theme (been using it on WXP and KDE 3.4 and wish MS was providing it for every iteration of WIndows) but was so happy I didn’t have to use W95 anymore once W2K appeared and later WinXP. Only worse exeprience I had with WinME.

  12. Coming from Windows 3.11, Win95’s UI was AMAZING. It really was a big step up!

    But.. I had Zero use for it after Win98 came out and would no doubt go straight to 98SE if I was building a retro-machine today.

  13. In 1995, when Win95 came out, having a built in, well engineered tcp stack was a big deal, at least for me. And yes, the UI was nice. MS didn’t do as well until Windows 7. And they promptly made it ugly again.

    Win95-OSR2 and the instability that resulted from trying to uninstall Internet Explorer (Hint: don’t) was what led me to switch to BeOS (That went well…), and thence to MacOS X on Blue-n-White PowerMac. These days I’m a hybrid user—Mac and Linux—but the commercial software thing is *still* a big problem.

    I may yet give Windows another try. It’s been nearly 30 years…

Leave a Reply

Please be kind and respectful to help make the comments section excellent. (Comment Policy)

This site uses Akismet to reduce spam. Learn how your comment data is processed.