6 ms·
> "It followed a set of five rules to benefit the end user: no installers, no archives, no registry keys, no additional runtimes and a single executable file."
by mrandish 2y ago
> "It followed a set of five rules to benefit the end user: no installers, no archives, no registry keys, no additional runtimes and a single executable file."
Reading this sentence made me feel warm and happy. I get why the registry exists and things work the way they do today around the Windows software ecosystem but... damn, I really miss the days when most desktop software was more like this. These days I try to use portable installs whenever they're available, I just wish it was more common. The time, inconvenience and uncertainty I'll be able to fully restore all my preferences makes me actively avoid reinstalling Windows.
- dkga 2y agoThat simplicity and lightness of design also resonated with me. By the way, really cool read-off. The only thing I missed though was a deeper discussion of some of the challenges that the author alludes to in the beginning. But that’s just me being pedantic, the post is really nice and actually seems to be quite an impressive work.
- yndoendo 2y agoThat is one of the reasons I like GO language. Single executable, which makes tooling easier for others to use. My alternative method is using single executable packaged with NSIS that extracts everything to a temp directory before running. Sorry, Window Registry is a cornucopia of inconsistency and poor design. Gnome's Registry is well designed, comparatively. Key descriptions, value options with limitations and which is the default is a quality User Interface design. Just look at the Windows group policy to registry mappings, they are all over the place for the same logic layout with double negatives for keys.
- airstrike 2y agoObligatory comment saying you can do the same in Rust
- IshKebab 2y agoIt's not quite as seamless as in Go to be fair. But it does mean you can write Rust instead of Go.
- delusional 2y agoYou can in fact also do it in C
- eptcyka 2y agoI can’t target msvc or aarch-64-apple-* and compile a binary on Linux, without resorting to significant amounts of rectal dentistry.
- iknowstuff 2y agoCan’t you just replace the “cargo” command with “cross” cross build —-target=… https://github.com/cross-rs/cross https://github.com/cross-rs/cross
- demurgos 2y agoCross-building for Apple is possible, but it's far from smooth with many steps that you have to figure out by yourself unfortunately.
- cooljacob204 2y agoI use this which seems to work well for my projects. Particularly their docker image. https://github.com/rust-cross/cargo-zigbuild https://github.com/rust-cross/cargo-zigbuild
- jeroenhd 2y agoI've built .exes for Windows just fine on Linux. I don't know about Apple stuff, though, I don't think there's any built-in Linux tooling to submit an executable for Apple's signature scheme.
- p_ing 2y ago
- djfobbz 2y agoYeah, that's why Go is a solid win - single binary, no installer headaches, just build and run. Rust's powerful but comes with build complexity and dependency juggling. Go keeps it clean, fast, and dead simple to deploy.
- dgfitz 2y agoI’m not sure what the best path forward is for making single-binary apps without static-compiling in of the libraries. Licensing usually makes that untenable.
- ryandrake 2y agoThe license is one of many the tradeoffs you make when you choose whether or not to include third party libraries. You don't have to use them.
- dgfitz 2y agoI sure don’t. You nailed it.
- maccard 2y agoPay for it, or open source your work (assuming you’re talking about QT).
- TingPing 2y agoThe classic option is just a self extracting exe. I don’t really understand the fear of archives personally.
- gkbrk 2y agoWhich license forbids static linking?
- 01HNNWZ0MV43FF 2y agoThey might be referring to *GPL libraries not allowing proprietary / permissive exes to static-link them. e.g. I think Qt requires its DLLs to be separate on disk as part of the LGPL, unless you buy the commercial license.
- rubymamis 2y agoPlease don’t spread misinformation, there’s a HUGE difference between GPL and LGPL, and you CAN statically link with LGPL you just must provide the object files to the user so they can re-link them with any version of Qt they want.
- thrdbndndn 2y agoThere are lots of useful actions an installer does that (some, if not most) end users actually want, including but not limited to adding shortcuts to start menu so you can find it or search for it, associating file formats, registering to Windows' program list, etc. I was a big fan of "portable" software, but nowadays if a software offers both ways, I actually prefer using installer. Otherwise I have to manually add them to Start Menu to be able to search for it, to begin with. I do hate registry keys, simply for the fact they are often lost after reinstalling the OS. Please just keep all the settings in %appdata%!
- pjmlp 2y agoIf only everyone actually kept up with Windows development best practices, including Microsoft teams themselves[0]. Configuration via XML files, AppData, registry free COM activation, MSI installers, only to quote a few examples, are decades old by now, at very least since Windows XP. [0] - To be fair, nowadays many young employees seem to only ever used Windows after joining Microsoft, so what else can we expect, if apparently they don't get the right mentoring.
- CLiED 2y agoIs there a book or site documenting these best practices somewhere? I'm getting into windows dev and am curious about them.
- p_ing 2y agohttps://learn.microsoft.com/windows/apps/get-started/best-practices https://learn.microsoft.com/windows/apps/get-started/best-pr...
- kibibu 2y agoI cannot stand AppData, specifically the way it's often used to store files that should be in Documents.
- jeroenhd 2y ago
- marcodiego 2y ago> no installers, no archives, no registry keys, no additional runtimes and a single executable file. This is exactly the experience nowadays with AppImages.
- deleted 2y ago[deleted]
- Narishma 2y agoAppImages still leave traces in your home directory. If you're luck it's just a dot file or folder that can easily be deleted but I've seen some that pollute a lot more.
- tonyhart7 2y agoonly works with hobby project with barebones feature
- Dwedit 2y agoThe original purpose of the registry was to tell COM where to look for a DLL file given a GUID. Then COM could create instances of objects. You still see that in there with HKEY_CLASSES_ROOT. You can technically create objects without the registry, if you load up the DLL, then call the exported functions to create a Factory object, then use the factory object to create instances. It's what COM itself does.