[HN Gopher] Rust hello world app for Windows 95, cross-compiled ... ___________________________________________________________________ Rust hello world app for Windows 95, cross-compiled from Linux, no MSVC Author : sohkamyung Score : 106 points Date : 2023-05-13 11:50 UTC (11 hours ago) (HTM) web link (hails.org) (TXT) w3m dump (hails.org) | ryao wrote: | The title begs the question, how do you compile Rust with MSVC? | jamesmunns wrote: | MSVC is the default compiler backend for Rust on windows. You | can also switch to use GCC tho: https://rust- | lang.github.io/rustup/installation/windows.html | garganzol wrote: | I just can't help but point out how cool the Windows 95 user | interface was. Partially inspired by the NeXT OS, its clarity | endlessly resonates with me. | allochthon wrote: | As someone who used Windows 95 when it came out, it struck me | at the time as an off-brand Macintosh, making it feel kind of | cheap (a feeling that never went away). I had also been using X | Windows by way of SGI's workstations around that time, and IRIX | felt clean, if a little old-school, by contrast. | asveikau wrote: | 95 felt amazing if you were used to 3.1. I had some exposure | to Mac then and I liked it a lot, but somehow I always saw it | as a different thing, rather than Windows being a knockoff. | (Obviously there was a lot knocked off. It was really funny | to me that they introduced a "recycle bin" to copy the Mac | "trash".) | qalmakka wrote: | Windows 2000 was the pinnacle of Windows UX, change my mind. | statquontrarian wrote: | Currently running Chicago95 on Linux! | https://github.com/grassmunk/Chicago95 | ilrwbwrkhv wrote: | I swear. The first thing which came to my mind too. So clear. | So precise. Why did we take a worse turn here seriously? Is | there any research on this? | rafabulsing wrote: | This is something that I've wondered about before. I've seen | many people with that opinion: UIs in the past, although dated | looking now, were very intuitive, in that every interactive | thing _looked_ interactive. | | Contrast that with amorphous, flat, "clean" designs we have | today. | | So what could we do to have something that looks nice and | modern, but is also intuitive, with clear affordances? | [deleted] | badsectoracula wrote: | > in that every interactive thing looked interactive | | I agree in general though i'm not sure Win95 was that | consistent. Buttons did look 3D but menus - also interactive | - did not. Similarly with the context menu icon at the top | left, it was interactive but didn't look like it. Meanwhile | Win98 had toolbar buttons become flat. | | There was an attempt with Win3.0 (i think) to define a form- | follows-function approach where "if something can be | interacted with it should be 3D" but even that didn't went | far (checkboxes were not 3D nor were edit boxes). By late | Win3.1 the ctl3d (i think) DLL was introduced to make | everything look 3D regardless of function. | | In comparison to today, sure things were better, but it isn't | like there was any point in time where things were consistent | in terms of control/widget look following its function. | layer8 wrote: | Not every control was 3D, but for example in the menus you | had mouseover highlighting that would suggest that you can | click the item. And if for some control it wasn't mouseover | highlighting, then it was a tooltip or a changing mouse | pointer. | zac23or wrote: | I've been in development for 24 years and now I have issues | with some very strange UIs. Where do I click to post? | | Old UIs are consistent. Buttons are buttons, labels are | labels, and so on. | | New UIs are inconsistent. In the facebook interface, the post | button is not a button, it's a label. It may have changed | since I last used it. It also occurs in native programs. | | In older UIs, button size makes sense. Today every app | recreates the buttons, with absurd sizes. | | Contrast. Designers love low contrast in the new UIs. Here in | HN it is sometimes very difficult to read the text. | | As a developer, I participated in several meetings about new | UIs. "Beauty" is the keyword. The beauty seems to be in the | rounded corners and the use of labels instead of buttons. | Yes, I created a bunch of shitty UIs. | | But most importantly, dark patterns don't exist in old UIs. | Dark patterns are the worst thing about the new UIs. | echelon wrote: | In the 90's, the concern was teaching new users how to | compute. Personal computers for the home were still | relatively new, and many people were using them for the | very first time. Everyone was concerned with usability. | | In the 20's, the concern is onboarding users that already | have devices and pay money to use software. We don't think | as much about familiarity, teaching, etc. | zac23or wrote: | That's it, perfect. | | Perhaps the most important thing is to keep the user on | the platform, avoiding his departure as much as possible. | Thus, a "unique" interface helps with this. | bentcorner wrote: | Even with old UIs there were definitely mis-use of UI | elements. Clickable labels that opened things, buttons made | of images. Apps that were basically an imagemap that you | clicked on. Think early media apps like Realplayer. | | Although I don't know if you'd really classify these as | "old UIs" - they were definitely old, and had a UI. You | probably mean "use native platform widgets were possible | and any new widgets look as native as possible". | | But then some apps bridged this gap nicely. Winamp was very | "non native" but the default skin was consistent, clean, | and fast. | zac23or wrote: | > Even with old UIs there were definitely mis-use of UI | elements | | Yes, but they were exceptions. Interface Hall of Shame | has some examples http://hallofshame.gp.co.at/ | | > Winamp was very "non native" but the default skin was | consistent, clean, and fast. | | Visual aside, Winamp follows certain standards. Buttons | are buttons, for example. | forgotmypw17 wrote: | Windows 95 was developed over several years with a lot of | research and user studies. The primary objective of all this | work was so that a person without prior exposure to computers | could figure out how to use it. The software was designed to | help the user accomplish the tasks they have set out to do | before sitting down at the computer. | | With most modern mainstream interfaces, both the audience and | the objectives have changed. The overwhelming majority of the | audience is now computer-literate and can be counted on to | figure out how to use the basic features regardless of their | quality. And the design objectives for many interfaces have | changed to manipulating the users to do what the developer | wants them to do, with the user's tasks relegated to a side | quest. | | Another factor is that Windows 95 was developed for "install | it and leave it" operation, with the next upgrade coming in a | year or two. A lot of attention to detail was unavoidable | because you could not push an update a week after release to | patch a bug. At the same time, Microsoft was offering real | live person phone support for its products, so every UI flaw | cost them a lot in support costs. | | Also, one of the design requirements was to fully support | only-keyboard operation, and a lot of QA effort went into | ensuring this was true. This meant that every UI element had | to have a keyboard cue. This duplication of accessibility | resulted in a UI which was much more thoroughly evaluated for | its efficiency. | | Finally, I think there was a different culture around design. | I think a higher portion of people in the UI field were there | for personal and passion reasons, and would have been | embarrassed to have anything to do with the type of | blundering buffoon of an interface that is common in today's | computing. | garganzol wrote: | Excellent observations and analysis. Thank you. Indeed, | there is so much going on under the tip of the iceberg. | layer8 wrote: | I'm sure there are many ways to do a restyling, similar to | the Apple Aqua UI [0] for example, that could create a fresh | look, while maintaining the clear affordances. | | [0] https://en.wikipedia.org/wiki/Aqua_(user_interface) | | The issue, I suspect, is that the young UI graphic designers | working at Microsoft today mostly didn't grow up using PCs | and therefore don't really know what their missing. | FeistySkink wrote: | A full-blown OS with an office suite fit on something like | 100MB drive with everything opening and responding to user | input in a snappy manner. And it didn't show random ads or try | to track your every action. You could chose when and if to | install any updates. All the while running on a 486 with a few | megs of RAM. How did we get to the current state of software? | | Edit: I remember a few places still running 3.11 well into the | 00s because it just worked for the given tasks, got out of the | way and didn't require a super-computer to run. The performance | difference was especially jarring when Vista came out and | barely worked on contemporary hardware. | moonchrome wrote: | > How did we get to the current state of software? | | You mean how did we get to a point where : | | - I don't have to mash Ctrl+s because software crashers | constantly | | - segfaults are not a daily occurrence | | - any random executable can't crash the OS (hell modern | windows can survive a GPU driver crash) | | - I can use the internet relatively safely | | - I don't need to restart my device after every install | | etc. ? | HeladeraDragon wrote: | Completely agree. Modern software is so much better than | old software. Fuck the "ooh it runs on 100MB of RAM" I | don't fucking care. All I care about is that it's so much | more reliable than before, I can actually get my shit done | now. | FeistySkink wrote: | On rare occasions that I have to boot Windows to run some | government-compatible software on a 32-core, 64GB RAM and | I-don't-even-care-to-check-how-fast SSD, I have to listen | to it firing on all cilinders while Defender fights | Malicious Software something and Windows Updates while | I'm typing some text in a barely responsive page. Truly | getting my shit done. | | Edit: Forgot all the random software doing auto updates | and notifying me about it as I go. | moonchrome wrote: | That's the price of living in a world where you're | connected to the internet by default - a huge amount of | performance goes towards security | (sandboxing/scanning/rules). Windows 9x didn't even have | a firewall FFS. | | Windows has to chose defaults for a huge audience, if you | daily drove it it would probably just work. Way better | than 95 would. | bitwize wrote: | A 486 with a few megs of RAM coukd not run Windows 95 in a | snappy manner. It would swap like bugfuck. To do Windows 95 | usably, you probably need 8 MiB minimum, 12 or 16 MiB | ideally. | | Windows 3.x you could get away with 4 MiB. And that and | Office 1.0 could fit in 100 MiB. Even then, we complained | about it. | FeistySkink wrote: | According to Wikipedia, Office 95 required 28 to 88 MB of | storage. | reisse wrote: | > How did we get to the current state of software? | | Though playing mp3 was a heavy task consuming most of the | CPU. It was hard to do anything while listening to music. | | Or think about how pressing Ctrl-S once a minute became a | reflex, because MS Office crashed so often. | | Hell, anyone remembers how unstable Windows ME was? Or how | desktop Linuxes were practically non-existent? | | Current state of software is _amazing_ compared to what was | available at that time. | thwarted wrote: | Two comments in this thread (this one and a sibling) | mention needing to save often due to programs crashing, as | if reliability of the software is solved by showing ads and | tracking activity, or is a function of the size of the | program or the speed of the computers or software, the | things FeistySkink had mentioned. | reisse wrote: | Not sure about the ads, but telemetry definitely | increases reliability. It allows to debug very specific | issues with a comprehensive information about user | environment. Source: debugged proprietary app multiple | times using telemetry information. Sometimes the issues | discovered were not reproducible without recreating some | very specific environments. | | Surely there are downsides to telemetry and tracking, but | they can be useful for development. | photonbeam wrote: | Snappy is not what my memory of the IO on those machines was | mrighele wrote: | The IO at the time was terrible, also because,if memory | serves me right, plenty of disks/controllers didn't support | DMA transfers. | | But if you had a few megabytes to spare for caching (not | everybody did, for sure) the machines would be snappy, | because the UI was. | FeistySkink wrote: | I'm talking about general UI responsiveness. Perhaps this | is just nostalgia. | bitwize wrote: | It is. Windows UIs didn't get Amiga levels of responsive | until Windows 98SE or so. | robinsonb5 wrote: | And then lost them again during the gap between Vista's | launch and SSDs becoming ubiquitous... | FeistySkink wrote: | I had some of the first SLC SSDs. It didn't help at all. | Windows 7 was a massive improvement though. | pengaru wrote: | There's some truth to it just for vendor-supported | graphics driver reasons alone. | bluedino wrote: | Watching 90's GUI programs is always fun because you can | see the graphics as they are drawn, which I don't seem to | remember from back then. | robertlagrant wrote: | Now we have spinners that twirl while we wait for | graphics to transmit from another continent. | robinsonb5 wrote: | If you're nostalgic for that, there's plenty of modern | software with a watch-it-paint-itself UI. <cough _Sage_ | cough> | robertlagrant wrote: | I have never heard anyone call Sage "modern software" | before : - ) | jakewins wrote: | Haha I had the exact same thought. I still hear that | "brrbrbrrrbrre" of the HDD arm frantically trying to deal | with the overload of doing anything whatsoever. | junon wrote: | I do miss the sounds of older, more mechanical machines | though. You could be doing something else in the room | while your Very Long Task was running, waiting for the | silence that signaled it finishing. | garbagecoder wrote: | I don't recall it being snappy and I also recall it being | crashy. But it was a lot better than what came before it. | Given the hibernation Apple was in at the time, it was the | best alternative. Between the 95 launch and OS X 10.3 was | the only time I used Windows as my daily driver. | asveikau wrote: | > Given the hibernation Apple was in at the time, | | System 7 and Mac OS 8 were pretty good from a UI | perspective, but no memory protection and no preemptive | multi tasking was not great. For a long time "MacOS 9" | was synonymous with classic Mac, but I always remember 8 | being the last tolerable one, by the time 9 came around | the foundations were more clearly inadequate, it was like | the WinME of Mac OS, tiding over until OS X. | | > OS X 10.3 | | Yes. I remember some commentary on the first few versions | of OS X was that they were resource hogs. | badsectoracula wrote: | 486 was certainly not snappy, though Win95 did technically | run even on a 386 with 4MB of RAM (i know because i tried | it back when Win95 was new). | | However on the Pentium MMX@200MHz with 32MB of RAM i had | ~1996/97 it was _very_ snappy. On the same machine i also | ran my first Linux, Caldera OpenLinux 2.3 in 1999, with | KDE1 where it also felt very fast. | alexeldeib wrote: | I find it hard to believe _disk_ was snappy compared to | modern devices, since original comment mentioned IO. Cpu | /memory are down to program behavior in addition to hw. | Disk, more size and hw. And HW improvements have dwarfed | size increases (rather, facilitating them to some | degree). | FeistySkink wrote: | There was plenty of software and games that could fit on | a floppy or two. | bluedino wrote: | Fast on a Pentium 75, dreadfully slow on 486/25 | airstrike wrote: | Not to mention those beautiful tiling wallpapers. I'm partial | to the simplicity of the blue rivets, though it may just be | nostalgia... | | https://windowswallpaper.miraheze.org/wiki/Windows_95 | codegeek wrote: | Windows 95 and 98 are one of the best things that I have ever | come across when it comes to Software. | tmountain wrote: | What about the regular crashes that always happened at the | absolute worst time possible? For me, Windows 2000 was a | godsend from a stability perspective. I ran it until it was | truly no longer viable. | kragen wrote: | if you're interested in cross-compiling win32 programs from linux | without msvc you might be interested in | http://canonical.org/~kragen/sw/w32dry/ | | i wrote this 15 years ago but it still works on this recent | ubuntu system if you supply a couple of variables to make | make run CC=i686-w64-mingw32-gcc WINE=wine | | no rust tho | | in debian/ubuntu the package to install to get | i686-w64-mingw32-gcc and the attendant header files and libraries | is gcc-mingw-w64-i686 | | amusingly the executables i built 15 years ago still run on | current gnu/linux; not sure if that would be true for things | linked with libx11 and libxext, certainly not libgtk | csdvrx wrote: | Wow, fantastic! | | > amusingly the executables i built 15 years ago still run on | current gnu/linux; not sure if that would be true for things | linked with libx11 and libxext, certainly not libgtk | | win32 is how you write software you want to run forever thanks | to the large user base. | | I'm hoping for a wine cosmopolitan binary that would render to | sixels: that would run on about everything, with qemu ensuring | it keeps working if/when arm64 or mips64 take over amd64 | kragen wrote: | glad you enjoy it! | | sixel is not very widely supported, and the baud rate of a | vt340+ is not really adequate for a gui | csdvrx wrote: | I can play videos with mpv and a sixel output, so I think | the framerate could be enough with some minor tweaks (like | how RDP does) | mhd wrote: | I'm assuming cross-compiled from a way more modern computer. Or | could a Pentium I complete a Rust run? | estebank wrote: | I would guess that the first problem you'd encounter is getting | LLVM to work on that Pentium I. | 3836293648 wrote: | IIRC you can run rustc on ancient hardware if you compile it | yourself. You can't however, compile the compiler on 32 bit | hardware due to the 4GB RAM limit | Dwedit wrote: | The problem with Windows 9x is the 'ANSI' APIs everywhere, and no | support for Unicode. | | Oddly enough, we are actually going backwards from using the | UTF-16 APIs back to using 'ANSI' APIs, and simultaneously setting | the process code page to UTF-8. Any time you use ANSI APIs, there | is a hidden conversion step (allocation, conversion, copying) | where your text is converted into UTF-16. | josephcsible wrote: | > The problem with Windows 9x is the 'ANSI' APIs everywhere, | and no support for Unicode. | | Didn't you just need to install | https://en.wikipedia.org/wiki/Microsoft_Layer_for_Unicode aka | UNICOWS.DLL to fix that? | Animats wrote: | It's quite possible to develop in Rust for Windows without using | Windows. | | Try my open source "ui-mock".[1] This is a test of the cross- | platform stack. Just get the repository with "git clone", and | make sure you have Rust installed for target "x86_64-pc-windows- | gnu". See the Cargo.toml file for build instructions. | | This is a game-type user interface. It's just some menus and a 3D | cube. It doesn't do much, but it exercises all the lower levels. | This allows debugging cross-platform problems in a simple | environment. The main crates used are winit (cross-plaform window | event handling), wgpu (cross-plaform GPU handling), rfd (cross- | platform file dialogs), keychain (cross-platform password | storage), egui (Rust-native menus and dialogs), and rend3 (safe | interface to wgpu). For graphics, it uses Vulkan, so it will run | on Windows back to the last release of Windows 7. Not Windows 95, | though; it's 64-bit. It will also run under Wine, so you don't | even need a Windows system to test. | | My metaverse client uses the same stack. It's compiled on Linux, | and runs on both Linux and Windows. So I'm building a high- | performance 3D graphics program for Windows without even owning a | Windows system or using any Microsoft software. | | [1] https://github.com/John-Nagle/ui-mock | qalmakka wrote: | With xwin you can download a copy of the MSVC sysroot and use | it to build Windows applications on Linux. LLVM reimplemented | the entire MSVC toolchain and can thus link with MSVC | libraries. | junon wrote: | I compile BGFX + SDL2 for use alongside Rust on WSL without | using MSVC and can run the generated .exe directly from the | command line. Works fine - the package management is a bit of a | pain but not terrible (two commands to install dependencies | instead of just `cargo build`), but overall it has worked | absolutely perfectly. | weinzierl wrote: | Rust officially supports kernel >= 3.2, which is admittedly old | enough to cover any real world usage scenario. That being said I | wonder if someone tried to get a Rust program (or even better the | compiler and toolchain) to run on an old 90s Slackware or | something? That'd be an article I'd love to read. | drewcoo wrote: | > No MSVC involvement whatsoever | | > all I had to do was extract a bunch of headers and link | libraries from the Visual C++ 6 SDK | | Hmm . . . | [deleted] | rektide wrote: | I wonder whether it's actually legal to extract & independently | redistribute these libraries. | https://github.com/haileys/vc6-sys/tree/main/sdk/lib | garganzol wrote: | Those files just reflect the publicly available Windows SDK, | so it is pretty much ok to extract them - they reflect just a | public domain knowledge. Actually, you can even create your | own libraries with special tools like IMPLIB. | criddell wrote: | The license says you cannot redistribute the debug version | of the libraries. | | That's okay though because the build tools are freely | available from Microsoft. Don't bundle them - just tell | your users where to get them or auto-download them with | wget or something like that. | ComputerGuru wrote: | That you can't distribute the specific compilation of | publicly available knowledge is different from | recompiling (even all) that same knowledge into your own | work. | | It's why you can publish and have copyright over a book | of quotes from dead people, but no copyright over the | individual quotes themselves (which are in the public | domain). | kragen wrote: | in the usa (and i think in berne convention countries in | general) some quotes are long enough to be copyrightable, | and the copyright can last decades after the author's | death ___________________________________________________________________ (page generated 2023-05-13 23:00 UTC)