9 ms·
Did you ever need to run a piece of C# code on Windows 3.11?
- Dutchie2020 7y agoLove this guy, make sure you check out his 8kb C# game: https://medium.com/@MStrehovsky/building-a-self-contained-game-in-c-under-8-kilobytes-74c3cf60ea04 https://medium.com/@MStrehovsky/building-a-self-contained-ga...
- zip1234 7y agoIt really is a great article and truly interesting techniques to get the size down.
- rafaelvasco 7y agoThat's like gold to me. Really useful tips right there. At the end things went crazy haha. I'm satisfied with 1MB size hahah.
- fuball63 7y agoI've been seeing a lot of stuff about Windows 3.11 lately, did they release it free recently? Like they did early versions of MSDOS? https://github.com/microsoft/MS-DOS https://github.com/microsoft/MS-DOS
- Macha 7y agoThe author mentioned in a reply that they got their copy with a VS subscription.
- sebazzz 7y agoYes, and until about a year back Windows 95 and 98 were available also but they have been taken offline. If I recall it correctly it is due to some copyright issue.
- zozbot234 7y agoDidn't Windows 95 and Windows 98 include Java by default? Probably yet another side-effect of the Oracle-Google thing.
- pram 7y agoMicrosoft Java (lol) and they already were sued about it ;P
- stkdump 7y agoOh, I remember J++! The glorious embrace and extend days...
- WorldMaker 7y agoJ++ is a big part of why C# exists today.
- Nitramevfank 7y agoIsn't that a back backwards? Isn't it more like: Microsoft wanted a more modern language and they weren't allowed to use Java so they created c#?
- WorldMaker 7y agoMicrosoft thought Java was a good idea in that they liked the JVM a lot, but the language itself they saw as flawed and missing key features that would make it a truly modern language, in particular they heavily disagreed with Sun's approach to FFI (foreign function interface) [Java's slow, laborious efforts eventually building JNI, the Java Native Interface], because of their many years of experience for better and worse with COM (component object model). J++ was never meant to be "Java", and never technically was even in branding, it was essentially a second language (that Microsoft saw at the time as C++ is to C, it was to Java, and that's very clearly represented in that brand name) that also targeted the Microsoft version of the JVM, and used a couple Microsoft-specific escape hatches for FFI and COM. (So it absolutely was an "embrace and extend", but it wasn't of the Java language itself so much as it was the JVM that Microsoft wanted to embrace and extend that seemed to fright Sun so badly. That's probably why so much of the legal drama and the consequent blows to the rest of the Java ecosystem at the time was Sun withdrawing JVM licenses from just about everyone as a part of that battle. Originally Sun seemed rather happy licensing the JVM to whoever wanted to implement it, which is why Microsoft had a JVM in the first place, thinking controlling the Java language was enough. Sun worked to put that genie back in the bottle and move everyone back to mostly a single JVM again. There's no lack of irony in the exact same battle playing out between Oracle and Google decades later in the battle of Dalvik [Google's JVM] and Android.) It wasn't that Sun didn't want Microsoft using Java, they didn't want Microsoft using the JVM any longer, and without a license to build their own JVM, J++ wouldn't run on any other JVM and wasn't a useful language. When Microsoft lost their JVM they decided to start from scratch, moved the J++ team (including and particularly Anders Hejlsberg, C# lead) to a new VM that they could control from top to bottom (including its FFI mechanics), and much of what had directly been the J++ team used what they learned from the whole mess to create C#.
- fuball63 7y agoIf anyone else is curious what else you can get, Microsoft publishes this Excel list: https://download.microsoft.com/download/1/5/4/15454442-CF17-47B9-A65D-DF84EF88511B/Visual_Studio_by_Subscription_Level.xlsx https://download.microsoft.com/download/1/5/4/15454442-CF17-...
- neurostimulant 7y agoPeople uploads a lot of old Microsoft OSes and software on Internet Archive [1], but curiously, no one uploaded Windows 3.11 installer yet (plenty of Windows 3.1 though). I wonder why. Legal reason? [1] https://archive.org/search.php?query=creator%3A%22Microsoft%22 https://archive.org/search.php?query=creator%3A%22Microsoft%...
- ComputerGuru 7y agoHoly backwards compatibility, Microsoft!
- mister_hn 7y agoTry it now MacOS X
- blinkingled 7y agoI'm ok with Apple having different priorities so long as it benefits the end users of the product (and I'm sure some people will go to lengths to make up end user benefits ) but whenever I use OS X I just don't see any benefits of not having backwards compatibility - it's not faster than Windows , nor stabler, it's not like it updates faster and it's only getting iOS features backported. So it feels like not caring about backward compat is just a self serving easy way out for Apple.
- jtdev 7y ago> “ it's not faster than Windows , nor stabler” Couldn’t disagree more; ctrl-alt-del gets a LOT of use on every Windows OS and client software combination I’ve ever used - I can’t even remember the equivalent hotkey on MacOS although it’s now been my daily driver for ~2 years of heavy use.
- blinkingled 7y agoI don't remember using Ctrl+Alt+Del on any personal Windows machine either. It's the corporate client systems that make you use it for login. Heck on surface devices you don't even have to touch the keyboard to login :) I haven't had the need to kill anything using task manager either so not sure what I would use CAD for.
- deleted 7y ago[deleted]
- 7y ago
- mmoez 7y agoTruly mind-boggling!
- jugg1es 7y agoHis twitter feed is pretty interesting. He's a damn wizard. https://twitter.com/MStrehovsky/status/1214542538079690757 https://twitter.com/MStrehovsky/status/1214542538079690757
- yread 7y agoHow come there are so many Slovak and Czech people working on .NET Core at MS? Tomas Petricek, Karel Zikmund, Jan Kotas, Jan Vorlicek, Tomas Matousek,...
- flamtap 7y agoCould be as simple as a networking thing. Czech/Slovak people know Czech/Slovak people, those people get recommended, etc.
- jhkjhtiou45 7y agoCould be that they aqui-hired some Slovak/Czech company that ended up working on .NET Core.
- JoeMayoBot 7y agoGreat minds - Microsoft is an increasingly diverse company and you'll see smart people from everywhere in the world there.
- DaiPlusPlus 7y agoAye. My team in DevDiv (home of .NET) had a Brit (me), a Turkish lady, two Russians, two Canadians (one French), three Indians, my lead was Mexican, and only 1 American.
- MStrehovsky 7y ago(Author of the "C# on Windows 3.11" hack here - and a Slovak.) I would say the concentration of Czech/Slovak people around .NET at MS is a result of accidents and networking. I got into the team thanks to a friend of a friend who heard I was interested. But yeah, it's a surprising number given the size of the population of Slovakia and Czech republic. There's a newly opened .NET development center in Prague so the number is likely going to grow (they do hire from all over the world though): https://karelz.github.io/hiring_prague_net/ https://karelz.github.io/hiring_prague_net/.
- vortico 7y agoIt's funny that someone else on HN just managed to run a Java program on Amiga 1000. https://news.ycombinator.com/item?id=22011199 https://news.ycombinator.com/item?id=22011199
- paulddraper 7y agohttps://www.xkcd.com/801/ https://www.xkcd.com/801/
- thrownaway954 7y agothe last 2 articles from this dude have amazed me. he is a NINJA!!!
- leeoniya 7y ago> This will produce a single EXE file that has whopping 65 MB. The produced EXE includes the game, the .NET Runtime, and the base class libraries that are the standard part of .NET. You might say “still better than Electron” and call it good, but let’s see if we can do better. Perhaps a better JS baseline would be QuickJS [0]. Once 1.2MB was reached: > Now we’ve reached the end of what’s possible with the .NET SDK and we need to get our hands dirty. What we’re going to do now is starting to be ridiculous and I wouldn’t expect anyone else to do this. We’re going to rely on the implementation details of the CoreRT compiler and runtime. QuickJS is 620K. I guess that doesn't include any kind of facility for rendering to the screen (besides basic barfing to stdout) or interacting with keyboard/mouse. i wonder how much code would be needed to add support for a basic canvas pixeldata api & keyboard event handling. [0] https://bellard.org/quickjs/ https://bellard.org/quickjs/
- int_19h 7y agoVery little, actually. You'd need CreateWindow to get a surface to render onto, and from there you have access to GDI, GDI+, OpenGL, and D3D via P/Invoke If by "basic Canvas pixelData" you mean blitting an array of pixels in a loop, that would require a grand total of 4 API calls: CreateWindow, GetDC, CreateBitmap, BitBlt. Keyboard and mouse handling would be a dozen lines of code to process the corresponding window messages in the event loop. I bet this would all still fit in under 64Kb.
- protastus 7y ago"Turns out the object files produced by the CoreRT ahead of time compiler from 2020 can still be linked with the linker that shipped with Visual C++ 2.0 in 1994." This really blew my mind.
- gambiting 7y agoYeah, for all the shit that Microsoft gets, their backwards compatibility efforts are extraordinary. I work in games and we recently dug out a project from 1998, last built using Visual Studio 5, and everything just compiled, linked and ran using Visual Studio 2019 with some extremely minor changes in project config.
- pixelpoet 7y agoAs much as I needed to run Java on an Amiga, at least.
- amluto 7y agoFor what it’s worth, CPU compatibility with old segmented code (like Windows 3.11) is a bit iffy these days for a silly legacy reason. The old x87 floating point coprocessor had two registers FCS and FDS — they’re the CS and DS segments at the time of the last x87 data instruction. This was used for the 386’s asynchronous FPU exception handling. Fast forward to the ultramodern 486, and floating point exception handling was cleaned up and FCS and FDS became unnecessary, but they were kept for compatibility. All was well. Unfortunately, AMD made a mistake in AMD64: the new 64-bit floating point context switching instructions couldn’t switch the FCS and FDS registers. This not only broke some very old software when run on a new kernel or hypervisor, but it also created a potential information leak. Sadly, new CPUs “fix” this in an unfortunate way. Trying to read FCS or FDS gives zero. Now some very old software is broken.
- userbinator 7y agoOh... Win32s. For a moment, I was wondering how he got the C# compiler to generate 16-bit code.