Windows NT 3.1 & KVM

No go.

No go.

I don’t know what I was expecting, but I thought I’d try to install Windows NT 3.1 Advanced Server in a KVM virtual machine.  No doubt the processor is just too new.  The -cpu 486 / -cpu pentium flags didn’t help things out at all.  However using Qemu has it running just fine.

I also had this crazy idea that haproxy could front HTTP 1.1 requests into serweb so I could go back to having a Windows NT 3.1 web server.  Naturally that didn’t work.

502 Bad Gateway

The server returned an invalid or incomplete response.

Oh well.

The useless update, is that I managed to get Apache 1.3.4 to compile and run on Windows NT 3.1!

Apache 1.3.4 on Windows NT 3.1

8 thoughts on “Windows NT 3.1 & KVM

  1. IIS on Windows NT advanced server probably only supports HTTP 1.0. If you ran Apache mod_proxy to rewrite the request, you could probably get it to work. It might even be possible to get a modern apache to run on that antique; the underlying APIs Apache are relatively standard, and the docs say 2.4 even work on Windows 2000. Aside from service management code, its probably doable with a bit of work

    • This pre-established iis…we are talking 1993, years away from when Microsoft cares about the Internet. At this point the Ip stack is out sourced to a 3rd party and at this point TCP/IP is really a Check box, rather than a strategy..

      The tide doesn’t really turn until 1997, with the forced inclusion of its on Windows NT 4.0

      • Right, but the WinSock API however was stable; Winsock 1.0 was defined as a specification, and 1.1 had several implementations such as Trumpet Winsock.

        A part of me is kinda curious what it would take to get a modern apache to run on old NT.

        • I would probably start with an old apache….

          I’ve never really tired to be honest, I only used the older ‘serweb’ thing as it too was a product of 1993. Running on NT 3.1 really limits you to Visual C++ 1.0 16/32 bit versions, and Watcom C/C++ version 10. It may be entirely possible…. As Apache sure did run on NT before, although I have no idea what features of NT they really relied on.

          Of course Windows NT 3.5 is a lot more API solid than 3.1 as a lot of things just aren’t in 3.1… And don’t forget the TCP/IP stack in NT 3.1 is also a 3rd party solution. The Microsoft stack didn’t appear until Windows NT 3.5.

        • I know it’s not “modern” but I did manage to get Apache 1.3.4 to compile with the Visual C++ 1.0, and even better it runs on NT 3.1.. the Win32 SDK version is just too old it seems, although I havent dived in to see the difference between the old 3.1 SDK/DDK and the Win32 SDK ‘final’ release.

        • It’s a matter of going through a 1.1 proxy, and of course webserv 0.3 didn’t exactly see wide scale deployment behind reverse proxies (did they even exist in 1993?) as such.

          Instead I ported Apache 1.3.4 onto NT 3.1, and that works fine.

      • I doubt anyone other than you & me cares about this, but the other day I stumbled onto the realization that Visual C++ 6 (and older) will target NT 3.1 – you just have to tell it to. It won’t run on NT 3.1, it won’t do anything to help you avoid using functions that don’t exist there, and the CRT might include those functions (use static linkage!) but when trying to move code backwards that uses newer C++ etc, it can still be helpful. (Write up in the website link.)

        Also, Visual C++ 2 is a much nicer compiler than 1.1/Win32 SDK and targets NT 3.1 by default. It also runs on 3.1 although the IDE warns you that doing so is a bad idea. I never had access to 2.1 or 2.2, but for this type of thing 2.2 seems like a bit of a holy grail if you can find it.

Leave a Reply

Your email address will not be published. Required fields are marked *