WinGet is terrible, I want AppGet back
niemarwinget.medium.com
niemarwinget.medium.com
Keivan is the only one who ever mentioned "acquihire". Microsoft never did so... because there really was nothing to acquire! Keivan made grand statement about his idea being patentable but that he, in the goodness of his heart, decided not to patent anything but... package managers have been around for a long time now so there is really nothing to patent.
Reading through the AppGet code, it basically reads a XAML config with install instructions. CS101 project basically. Seems like he failed his PM interview pretty bad.
Now, all that whining did give him a lot of exposure for his startup here on HN...
It's a small example and the annual market for Windows package managers could be less than a single team's budget, but the same holds for virtually every niche these days. Subsidized solutions offered by the pre-2008 companies with little chance for independent competition. We are not going to remain an innovative economy unless we find a way to crack down on this behavior.
Microsoft wants to attract developers from other platforms: Windows native code supporting no package managers that are all of good, general and fast is just the kind of situation that will make developers who come from other platforms hate the time they spend with theirs.
Microsoft's real interests don't seem to be the problem here: Windows losing its best package manager only hurts what they want to achieve.
It is a no-win situation: if you do nothing, MS will continue doing little, if you push, then you risk them getting their ... together making your work irrelevant. I put this paragraph here because I don't want people pointing at this a year from now "you were wrong, we did nothing and see WinGet is still nowhere".
My best advice, after learning after getting screwed by MS and Oracle. Lets call him Jim, partner of mine, and a fictional company lke Krackle.. They sued until discovery found something the engineers did..... running our version while developing competition. They sued because ours "processed too good" and "we had to copy them". Once the judge was showed the emails where they were DISASSEMBLY the pcode and sharing the map.
We got a fat check, and offered to buy us out. Jim and I retired from a 39k c app that till this day, most, if not all hospitals use
It's been a gigantic annoyance for the people at Microsoft as they are trying to figure out how to do upgrades/uninstalls without the data you'd usually get from a deb or whatever.
How well a software developer / "manufacturer" deals with "setup" in the Windows ecosystem has almost always been a proxy for overall software quality in my experience. When "setup" is left as an afterthought I can usually expect other corners have been cut. When I see a custom binary running an installation I start thinking "brown M&M's".
Unfortunately it requires you to write (or copy from somewhere) literally thousands of lines of incomprehensible XML. You have to learn all the details of both MSI and the various novel sublanguages embedded in the WiX XML.
But fortunately you can generate all the XML from just a few lines of nice and clean C# using WiX#, which adds a user-friendly API on top of WiX and lets you forget about XML and databases entirely: https://github.com/oleg-shilo/wixsharp
To be fair, though, an MSI to install a 10 files in "C:\Program Files\AppName", register a couple .NET assemblies, create a couple of shortcuts, and throw a few values into the registry would amount to <100 lines of XML.
Here's a years-old WiX 2.0 syntax source file to install 4 files in "C:\Program Files\appname" and run an EXE embedded in the MSI to install a service: https://github.com/EvanAnderson/ts_block/blob/master/MSI/ts_...
I've only seen "thousands of lines" of WiX source when dealing programs that install a ton of files, or put scads of entries in the registry.
Most of the MSIs with WiX are based on a simple skeleton generated from a template, and using "includes" generated by the "candle" tool.
Understanding the Windows Installer and the WiX source feels analogous to what I see in "modern" web development-- a bunch of tools that developers use, seemingly without understanding what they do, to create a massive pile of edifice into which original code is finally placed.
[0] https://docs.microsoft.com/en-us/windows/msix/overview
[1] https://docs.microsoft.com/en-us/uwp/api/windows.management....
"You can run your desktop application installers through this tool and obtain an MSIX package that you can install on your machine or upload to the Microsoft Store. "
Gross.
Maybe they should provide better tools. Last I tried to deal with MSI I quickly went back to NSIS and got it done in a fraction of the time.
I will say though, I remember the documentation being helpful and fairly straightforward, if a tad large (but that's what you get with a tool that's supposed to solve a complex problem).
Are we living in the same universe? Did you mix up the OSes?
Then came the registry
Then came the AppData.
Now its more or less the same as on linux.
Your house has a kitchen, bathroom, bedrooms, "and so on". You don't keep your car or skilsaw in the ones listed, but there is a place for each.
There is nothing about MSI that enforces this. You can make an MSI that spews files all over, no problem.
MSIX is actually quite good. Apps run inside a semi-virtualised container, so that writes to the registry and AppData are redirected. Uninstalling the app therefore uninstalls all of it, even if the app doesn't cooperate. MSIX can also be upgraded automatically in the background by Windows itself.
However, it's new, so nothing uses it.
> Simpler than packaging. Scoop isn't a package manager, rather it reads plain JSON manifests that describe how to install a program and its dependencies.
I haven't tried WinGet, but Chocolatey still seems like the best package manager on Windows. Which is unfortunate, as it's very unfriendly to use, promotes their Pro plans too agressively, and like the article says, slow.
[1]: https://github.com/lukesampson/scoop/wiki/Chocolatey-Compari...
In fact it took far too long for chocolatey to even consider _uninstall_ that it was a total mess for years while maintainers played catch-up.
Scoop, by contrast, keeps everything user level and installs programs to its own folder in Documents aiming to portable.
Scoop is a fair amount simpler and doesn’t have any sort of pro version to upsell you on. Scoop’s catalog is smaller but still pretty well managed.
One key difference is that there's no such thing as a Scoop "package", unlike with Chocolatey. You can't build a file that can be moved and installed offline, since Scoop downloads and extracts it from a URL. I suppose you could setup a local proxy and workaround it, but it's not the main use case.
I use both since Scoop is limited in the installers it supports, preferring Scoop when a program is available there.
There are some manifests that break it since they absolutely have to (like the VC++ Redist), but for most of the apps, Scoop actually acts a whole lot like a package manager.
Scoop seems awesome too, just doesn’t fit my particular needs
There is Chocolately too, but I've never been a fan. The website is horrible for one thing, but there are 2 big problems: package updates sometimes take forever, and there are frequently multiple "versions" of a given application, made by different people - how do I know which one is the better quality, and how do I know which is more likely to be updated in future?
Updates take forever ? What does that mean and why would you care tbh if it takes minute more or less as it is unattended ?
I mean, it is a chocolatey, because they allow multiple packaged for the same software. I don't have this problem with scoop.
> You can use one with most downloads.
Sometimes it's that simple, but other times there are material differences between the packages, or multiple packages with about the same number of downloads. And then in the comments for package A you have people saying "this is rubbish, use package B instead!"... and of course, in the comments for package B you have people saying "this is rubbish, use package A instead!". Honestly, I can't be bothered with it - package managers are supposed to make things easier.
> Updates take forever ? What does that mean and why would you care tbh if it takes minute more or less as it is unattended ?
I didn't mean the time the actual install took, that's clearly nothing to do with chocolately - I meant that packages are often not updated by the maintainers.
I think this is more healthy then having one with maintainers refusing to do stuff you may need. The real thing would be for vendors releasing packages but we are far from that in Windows land. My hope for MS WinGet was that since it is backup from MS that vendors will adopt it, but since it sucks, this will probably not be the case.
> I meant that packages are often not updated by the maintainers.
Yeah, that was the problem far more before then today. I created AU to solve that issue [1].
- It's difficult to get Explorer shell integration to work.
- Apps are not installed in their expected locations, so Git Extensions won't recognize Notepad++ unless you tell it where it is.
- (the worst) Every application has at least 3 different EXE locations: the EXE in the shims folder (added to PATH, spawns the actual application as a child program), the EXE in the "current" folder-symlink (pointing to a specific version), and one EXE in every version's folder. And if you pin one of these to the taskbar, or associate a file extension to one of these programs, subsequent updates or app launches might open a different EXE that gets mapped to a different taskbar icon.
Explorer shell integration works just fine for me (7zip etc.), what app is giving you problems?
The fact that Scoops installs apps to a specific location may be sometimes problematic, but it's also the thing that makes Scoop great. In reality it's mostly stuff like you said, a one-off process of setting the current path.
The rule of thumb for the shims is to use the path with the "current" symlink. The exe in the shims folder is just a shim for CLI use, and version-specific folders are there just for updates/rollbacks. Windows may pin the "version name" path instead of the "current" path, but Scoop actually creates correct Start menu entries for GUI apps automatically (so you can pin that) or you could manually edit a .lnk's path and pin it.
VS Code (Codium), Notepad++, possibly Git Extensions, forgot what else (maybe Windows Terminal) create Explorer integration if you check certain boxes in the installer. And Scoop skips the installer, and you can't add integration after the fact.
You can install, update, and uninstall software.
And it also won't leave crap on your machine - everything is portable by default, and sits on a single folder.
Installing software with scoop gives me peace of mind.
The Scoop GCC manifest (and everything that depends on it) has been broken since January. GCC for Windows is now distributed using an unsupported archive format, and development to support that format has stalled out. https://github.com/ScoopInstaller/Main/issues/1752
Someone made a workaround patch using a different GCC mirror, but it's been sitting open for a month. https://github.com/ScoopInstaller/Main/pull/1933
One of the maintainers seems to be forking the scoop client, but their fork still uses the unmaintained main package bucket. https://github.com/Ash258/Scoop-Core
I'm pretty unhappy with the behavior of the maintainers to the author, though. There are better ways to suggest issues with documentation than just "this is a lie", and better ways to say a function name could be better than "is a horrible name". I also think it's rude to ask for a patch to be completely rewritten and then ignore it after the author does so.
Looks like a frustrating choice between a polite maintainer that isn't around or a rude maintainer that is still active.
However, his comments are often harsh, like you noticed. He's mostly on-point, but is very quick to rudely shoot down anything he disagrees with. Also he bans discussing or even mentioning his fork of Scoop on the Discord server, which is super weird since he put it publicly on GitHub in the first place.
Check Merged PRs https://github.com/ScoopInstaller/Main/pulls?q=is%3Apr+sort%... and you will see that the last non-bot one was merged 17 days ago.
For the most part, this does not matter. Most of the existing stuff is already present in buckets and auto-updated by CI. The problem is just when something breaks or something new needs to be added, which can take a non-deterministic amount of time.
Well if it is dead then that is a damn shame.
I wonder why after all this time Microsoft hasn't created an API to allow applications to register background update checks, like for example allowing applications to hook into the Windows update process or something. That seems like it would be more intuitive for most Windows users than a command-line package manager.
Of course they have some attempts at this but they don't cover every kind of application. Like ClickOnce (only for .NET) or Windows Store (only for UWP)
https://docs.microsoft.com/en-us/windows/msix/non-store-deve...
I really want this. I have several game launchers installed and it's a pain to want to play a game and realize there's a multi gig update you need to install because you haven't run the launcher in awhile. It would be nice if there was a central component that kept everything up to date but didn't require the software to live in the windows store.
They are slowly moving stuff like snipping tool and HEIC support behind the windows store. Eventually, it will be the App Store.
https://github.com/chocolatey/choco/issues/508
The big win with WinGet is mostly that it is a proper supported solution backed by Microsoft. But WinGet seems to require some more months before it is ready for primetime.
There's obviously more to this story, but it just seems like Microsoft don't value DevOps/automation (true from my experience trying to do CI on Windows). Think about how many man-hours both inside Microsoft and outside are being wasted by WinGet not doing these things. A colossal waste of time. So yeah, from my perspective, the criticism is entirely justified.
One thing I don't like about the Apple/MS ecosystems these days is that major pieces or open source now are pretty much required for most developers to do their jobs. Yet both seem to hold hostility to open source solutions. So some still believe in MS that open source is the devil, especially if you've spent 20 years in that mindset.
Example:
25 years ago in college, ssh was getting popular, and became the de facto connection tool a couple decades ago. Only in 2018 did MS finally add it to windows.
And Apple has purged GPL apps from their platform and has for years. https://news.ycombinator.com/item?id=3559990 Hence the need for articles like this: https://itnext.io/upgrading-bash-on-macos-7138bd1066ba
To my knowledge homebrew hasn't received one cent from Apple, yet most of the developers who use Macs use it. Yet, Homebrew is probably directly responsible for driving a significant amount of sales to Apple.
https://github.com/microsoft/winget-cli/blob/master/doc/wind...
The simplest possible install scenario would be: unzip this file, and add to path.
To uninstall: delete this folder.
Microsoft's solution [0]: if your app is in a zip file, repackage it as a msix/whatever proprietary technology.
To this day, you still can't update, or even uninstall stuff with winget.
But guess what it had baked in since day one (literally the third commit) [1]?
Telemetry.
[0]: https://github.com/microsoft/winget-cli/issues/140
[1]: https://github.com/microsoft/winget-cli/commit/67800b07618b5...
And if you’ve had telemetry turned off globally in Windows 10, as most people who care do, winget doesn’t send anything back to MS.
It's the opposite of scoop, where everything sits in a single folder, and you can get rid of it easily, and even monkey patch and hack things.
So far chocolatey is the only mature one. Scoop is nice too, but it can't really compare with it with number of packages.
It apparently got to the point where it shipped with Windows:
> OneGet is shipped in Win10 and Windows Server 2016!
It seems to support pluggable backends (docker, chocolatey etc).
this 'old' thread still nails it: https://github.com/microsoft/winget-cli/discussions/223
it's just sad.
use Chocolatey, if you can't for some reason try Scoop.
Dependence on windos was always an exercise in masochism. But it is easy enough to switch. You can still run any old windos programs you still need, under Wine, typically faster than native; or keep windos VMs, one per app.
why doesn't windows have real package management yet?
Just a small example I encountered just recently: Look at the install page for docker. Curl, pipe to some random folder, mix in some sudo access, then finally can I "install" the docker package.
My best experiences with packaging on linux have been gentoo ebuilds & arch pkgbuilds. These keep the build model pretty straight forward if the goal is to "just build a package".
That said: creating a dpkg is not an impossible thing to do. It's just more painful than it needs to be
2. They are running their own apt repos already anyway! The thing the grandparent commenter is complaining about is part of normal apt usage. It's not a manual installation of some piece of Docker, just a normal part of configuring apt in order to install something that is, in fact, properly packaged.
But the version is fixed per Debian release, which means that by its EOL it will be obsolete ( it's Docker, not a database, having the latest and greatest is a huge bonus). The whole point of custom repositories is to ship independently of the OS release cycle.
I have high hopes for Flatpak and Nix.
snap info docker | tail
snap-id: sLCsFAO8PKM5Z0fAKNszUOX0YASjQfeZ
channels:
latest/stable: 19.03.13 2021-02-12 (796) 137MB -vs. the Ubuntu one:
apt info docker.io 2>/dev/null | head -2
Package: docker.io
Version: 20.10.2-0ubuntu2That's the same as the version in the latest nixpkgs unstable:
nix search nixpkgs '^docker$' 15:41:11
* legacyPackages.x86_64-linux.docker (20.10.2)
An open source project to pack, ship and run any application as a lightweight containerAlso, afaict Nixpkgs doesn't expose any unit files for the Docker daemon, so it'd take a bit of monkeying around with a new package definition to expose the one from the Moby source so that you could use it on some random distro (or you could write your own). Nix doesn't currently have any system-wide module system for managing services on non-NixOS Linux, unfortunately.
EDIT: And being new, there facilities aren't as mature, userbase smaller, so not enough work is put into packaging the latest versions. Since they also take on the goal of sandboxing the barrier for entry might be higher.
But I think the main barrier to running Docker from Nix on non-NixOS is the lack of a systemd unit file or other init system configuration in Nixpkgs. Nixpkgs just doesn't have any facilities for that atm and afaict no one is working on them right now. There are definitely precursors to that functionality in:
• the NixOS module system, which provides exactly this functionality for NixOS, where the module system is in charge of configuring systemd
• home-manager, a module system like NixOS which adds support for systemd user services on non-NixOS: https://github.com/nix-community/home-manager
• nix-processmgmt, an experimental Nix framework for writing Nix expressions to describe services to be managed by a range of process managers that may or may not be PID 1 (which means the could be usable on non-NixOS): https://github.com/svanderburg/nix-processmgmt
• nix-darwin, a module system for macOS that provides some NixOS functionality, including managing services: https://github.com/LnL7/nix-darwin
The discussion on the service abstraction layer for Nixpkgs/NixOS is also very relevant. It shows that there has been interest in something like this for many years, but it's never quite come together: https://github.com/NixOS/nixpkgs/issues/26067
I wouldn't assume it's just around the corner or inevitable. It is a really exciting possibility, though, and the nix-processmgmt framework seems like something that could evolve into a service abstraction layer for Nixpkgs that could make facilities for managing services available in a uniform way even on non-NixOS Linux.
you mean this:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
in the section labeled ‘Add Docker’s official GPG key’, where you download a GPG keyring for Docker's apt repository and install it to /usr/share/keyring?
Really? That's a ‘random directory’?
"echo \ "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null"
But overall, that sentence you quote of mine was me trying to condense my general feel of the instructions in a bit of an exaggerated tone. Let's be honest, not all of the instructions there are super obvious if you're not comfortable with the Linux ecosystem. Most people will just copy paste everything on that page till docker works, ignoring the big fat warning saying "Always examine scripts downloaded from the internet before running them locally.".
If you're using Docker to develop applications for Linux servers, the bash builtin `echo` and `tee` are probably among the absolute minimum basics of the command line you ought to learn ASAP. And if you're gonna run Ubuntu at all, the format and use of `/etc/apt/sources.list.d/*` is part of your absolute minimum curriculum, too. I don't think the confusion of folks who are unwilling to do those things is a huge problem in this specific use case.
But you are right in general: it's unusual among desktop operating systems that in the Linux world, users are expected to know about how the configuration for the system is stored. And while I don't think that's necessarily a problem, it would be better if for extremely common use cases (like adding an external software source), users could always use tools (including command-line tools!) that didn't confront them with implementation details such as configuration file paths or lines to be appended to them and instead summarized what was to be done in human terms and asked them if they wanted to do it.
The Debian-based tooling is especially weak here, and especially at the moment, since `apt-key` has been deprecated for security reasons but there's no convenient tooling to replace it at the moment. :-\
is this an intentional portmanteau of “bundle” and “blunder”?
How they managed to do a bad job with so many awesome examples is however beyond me.
Some people don't have complete control over every computer they use.
With WSL, I still have to account for poor FS performance when files are not in correct location. GUI is still not seamless (Wayland is coming, but not yet arrived). I still have to fight the terrible UX that is Windows DE, instead of natural flow of i3wm.
Its the little things that eat up my cognitive budget that tire me way early in Windows compared to full fledged Linux distro.
It takes very little effort to look up if something's compatible before you plop 2 grand on it.
Most people dont look up whether "something will work" on Windows or Mac.They just simply use the machines they buy.
The difference is that the manufacturer-certified hardware for Macs has a giant advertising budget.
Correct for Windows. But then they just buy the machines and complain about their issues later, hence, this subthread.
Why not contribute to another open source package manager?
We looked at several other package managers. There were several reasons leading us to create a new solution. One critical concern we had was how to build a repository of trusted applications. We are automatically checking each manifest. We leverage SmartScreen, static analysis, SHA256 hash validation and a few other processes to reduce the likelihood of malicious software making its way into the repository and onto your machine. Another key challenge was all the changes required to be able to deliver the client program as a native Windows application.
https://devblogs.microsoft.com/commandline/windows-package-m...