Thanks for giving me another reason to leave the Ubuntu ecosystem behind me. The condescending tone that your message has seems to be relatively popular in the Ubuntu/Canonical community as well, at least compared to NixOS.
Thanks for giving me another reason to leave the Ubuntu ecosystem behind me. The condescending tone that your message has seems to be relatively popular in the Ubuntu/Canonical community as well, at least compared to NixOS.
In reality they're a hack on a packaging system that was never designed for third party plugability in this way. They very often break future upgrades. Third party apt repositories fundamentally cannot express all the necessary metadata to allow for upgrades to work in the general case. They don't even namespace properly; apt cannot even tell the difference between a third party installed package and one that came from the distribution. And third party packagers typically don't even consider future upgrades.
This is why Ubuntu is working on snaps: they are a mechanism that allows for third party plugability in a way that does not break the system.
If we want upgrades not to break, the system dpkg/apt installation needs to be left alone and not be interfered with by third parties.
Of course there are processes and policies to help us ensure quality and that other user expectations (eg. stability, integration) are met as best as we can. These take time and effort to negotiate. But we'd be happy to help to explain what's needed to be contributed to make progress in Ubuntu itself for any specific circumstance. Find us in #ubuntu-devel on Libera Chat, or https://lists.ubuntu.com/mailman/listinfo/ubuntu-devel-discu...
This is true. dnf and zypper handle this just fine in the RPM world, and they operate under basically the same paradigm. Are there no plans for apt to catch up?
What are you saying here? That having multiple versions of python installed can put your whole OS into some sort of unrecoverable corrupted state, and that’s expected and ok? That’s a non starter for me.
In my experience, this is the only safe way to have third party apt repositories:
- Don't install any third party packages which have reverse dependencies. This means no libraries, only applications. If you need newer libraries as a dependency then you have to statically compile the application.
- Don't install any third party packages which have the same name as an upstream package. If you want to install a newer third party version of an upstream package then you need to change the name of it and have it install all of its files in different locations. A prefix change is enough here, /opt is a popular choice.
- Delete all third party packages before doing an upgrade, in case a new upstream package happens to have the same name, or needs to put files in the same locations.
Do anything outside of that and you will risk getting your install into a broken state. Because even though you might think you are just installing some applications, what you are really doing is bolting things on to the upgrade process for the entire core system. Using nvm is perfectly safe though because that just installs the different versions to your home directory, it doesn't touch apt.
- The question of which files go in which directories in the system is a question for canonical (or whoever) to decide. Not end users or 3rd party developers
- The namespace of apt package names is special, and 3rd party / external dpkgs shouldn't add anything into it
I think this stance is entirely reasonable. Its essentially what windows and macos both do (and to increasing degrees with each version). But its a pity its taken the current apt packaging disaster to realise it. Its really convenient for users to have a package manager, and for 3rd party developers be able to write software for it. And these problems seem solvable:
- Namespace all 3rd party packages. Eg, @apple/foundationdb-server (as distinct from @canonical/git)
- Use overlayfs or something to essentially make /usr, /usr/bin, etc read only by normal processes. If these paths were only writable by system packages, the whole system would be much more predictable (and verifyable) - since that filesystem would only - could only contain a subset of the files in apt.
I get that flatpak and snap are both attempts to replace apt. But its a pity they're needed. I'm enjoying mint, but if I ever rebuild this machine I'm going to give nix a try.
This is not exactly a new problem, it's why Docker is popular, it's why Fedora Silverblue and NixOS exist. It's just not done on the OS level in Debian because in some ways it doesn't really need to be.
Regarding the python, the error message was something like "python is gonna be python 3 after the upgrade, and we can't handle that so you should uninstall python before upgrading", or something similar.
I'm just using what Canonical/Ubuntu are providing me when it comes to Python, but still somehow it's up to me to remove/install stuff manually when it comes to upgrading.
Ubuntu is not a system designed for running multiple versions of packages like you want it to. You can make it do it if you really want to, but you can't expect the Ubuntu developers to provide support for your unique use case. They give you one version of Python, the version that the _entire system_ expects, and if you're not happy with that, you should probably move away from Ubuntu. It can't and probably won't satisfy your day-to-day job's requirements. Try a rolling distro instead, or run the Nix package manager next to the system package manager so you can work around the lack of support Ubuntu provides you.
In my opinion, it's a lot better to abort the upgrade than to knowingly break your system and make you suffer through the recovery process. Sure, the installer could ignore the problem, or remove your carefully crafted Python setup, but you'd still be complaining if it did that and you had to reconfigure your entire machine again.
The real solution was mentioned up thread though: they are designing it to be used that way, but you have to use snaps or flatpaks. Not third party apt repositories which can overwrite system components in an infinite number of ways.
If the only option they have is an installer that runs as root, then the safest way to handle that would be to run it inside a docker container. Those companies should probably not be shipping installers on Linux unless they target very specific distributions and are working closely with them to ensure they don't break the upgrade process, otherwise it's going to cause issues.
Edit: here are the snaps and flatpaks and docker images I could find.
https://snapcraft.io/pycharm-professional
https://flathub.org/apps/details/org.mozilla.firefox
https://flathub.org/apps/details/org.chromium.Chromium
https://flathub.org/apps/details/com.visualstudio.code
https://flathub.org/apps/details/com.jetbrains.PyCharm-Profe...
https://flathub.org/apps/details/org.kicad.KiCad
https://flathub.org/apps/details/com.valvesoftware.Steam
https://github.com/xanderhendriks/docker-stm32cubeide
AFAIK, Solidworks and eM Client are not available on Linux, but if they were you would probably see them available in one of those forms.
https://www.rust-lang.org/tools/install: Curl an .sh
Steam: https://store.steampowered.com/about/: Download and install a .deb
Firefox: https://www.mozilla.org/en-US/firefox/all/#product-desktop-r... - Download a .tar.bz2
VsCode: https://code.visualstudio.com/download - Download a DEB
Pycharm https://www.jetbrains.com/pycharm/download/download-thanks.h... - download a .tar.gz2
Python - Install from source or use a 3rd party dep.
https://www.kicad.org/download/ubuntu/ - KiCad is the only exception that wants you to use an official package.\
Docker is a pain to use; it's a crutch used by web devs and Dev-ops for complex business stuff.