edit: hey guys, 60+ comments, can't reply from now on, but know that I am grateful for your comments, keep the convo going. Thank you to the y'all people who gave unbiased answers and thanks also to those who told me about Waydroid
and Docker
edit: Well, now that's sobering, apparently I can do most of these things on Windows with ease too. I won't be switching back to Windows anytime soon, but it appears that my friend was right. I am getting FOMO Fear of missing out right now.
I do need these apps right now, but there are some apps on Windows for which we don't have a great replacement
- Adobe
- MS word (yeah, I don't like Libre and most of Libre Suit) it's not as good as MS suite, of c, but it's really bad.
- Games ( a big one although steam is helping bridge the gap)
- Many torrented apps, most of these are Windows specific and thus I won't have any luck installing them on Linux.
- Apparently windows is allowing their users to use some Android apps?
Torrented apps would be my biggest concern, I mean, these are Windows specific, how can I run them on Linux? Seriously, I want to know how. Can wine run most of the apps without error? I am thinking of torrenting some educational software made for Windows.
Let me list the customizations I have done with my xfce desktop and you tell me if I can do that on Windows.
I told my friend that I can't leave linux because of all the customization I have done and he said, you just don't like to accept that Windows can do that too. Yeah, because I think it can't do some of it (and I like Linux better)
But yeah, let's give the devil it's due, can I do these things on Windows?
- I have applications which launch from terminal eg:
vlc
would open vlc (no questions asked, no other stuff needed, just type vlc) - Bash scripts which updates my system (not completely, snaps and flatpaks seem to be immune to this). I am pretty sure you can't do this on Windows.
- I can basically automate most of my tasks and it has a good integration with my apps.
- I can create desktop launchers.
- Not update my system, I love to update because my updates aren't usually 4 freaking GB and the largest update I have seen has been 200-300 mbs, probably less but yeah, I was free to not update my PC if I so choose. Can you do this on Windows? And also, Linux updates fail less often, I mean, it might break your system, but the thing won't stop in the middle and say "Bye Bye, updates failed" and now you have to waste 4GB again to download the update. PS: You should always keep your apps upto date mostly for security reasons, but Linux won't force it on you and ruin your workflow.
- Create custom panel plugin.
- My understanding is that the Windows terminal sucks? I don't know why, it just looks bad.
I am sure as hell there are more but this is at the top of my mind rn, can I do this on Windows. Also, give me something that you personally do on Linux but can't do it on Windows.
Thanks for the insight. At some point I need to read up on the windows kernel for example. All I ever read is articles like Linux performance gains with chiplet-based CPUs with multiple L3 caches and crazy stuff like that. I don't even know how Microsofts kernel development works and if and when they adapt to updated CPU architecture designs etc. All I know about the windows kernel is a few simple facts from uni. Like that it's a microkernel (or hybrid?) since NT and that has also been the time they implemented proper protection rings so it wouldn't crash as often as 98 and ME. And they made some good design choices and copied the TCP/IP layer from BSD (and presumably replaced it since). Guess I also sometimes live in my own little bubble. I'm pretty sure lots of things have been re-designed when we switched from 32 to 64 bit. I'm going to look it up. But it seems to be difficult (to me) to find articles like the one I linked above, only for Windows. And the Wikipedia articles are also very short.
Regarding the libraries: How do they do the backwards compatible form? I had a quick look at the Windows/System32 folder of my Windows 10 install, and I saw maybe 10 files with version numbers in the filename out of 5000 files. The rest is just something .dll
But I guess we're talking about different libraries anyways. I thought about something like SDL, the game's physics library, the QT5 libraries for your platform-independent application. Zlib for your compressed game assets. When I have a look at my Windows Steam directory, they're all somewhere inside, along with the game and not bundled with Windows. When I have a look at my Linux Steam directory, it's the same. When I have a look at any of the other applications on my Linux system, it's different. My distribution has a package manager and the software requires the system to provide all the compression libraries, game engine ... They're not bundled with every single game but provided by the package manager. That's what I was going for. Sure there's also a C standard library and system libraries that are tied more tightly to the operating system itself.
I know how the linux library symlinking works. It's alright for many cases and it lets you have multiple versions installed at the same time. But it has its caveats. And it's just not as easy in general. It's just a hard problem. Your specific library version has dependencies on other specific and maybe older versions. Configurations can get version-specific. Sometimes things break or can't be done in a backwards-compatible way. There are security vulnerabilities that need to be fixed, back-ported and whatever. And everything is just a convoluted mess. Shared library versioning is hard. And the way Linux does it isn't optimal. Actually there is lots of room to improve. Especially since we're designing and using things differently from back then when this was a good decision. But I don't think Flatpak or putting everything into Docker containers is the best solution, either.
Another thing I don't specifically like is the way software is spread across the system. I think I like it the way it's supposte to work on MacOS where you simply drag one application folder onto your disk and that 'installs' it. And everything is contained within and can simply be removed without resudie by deleting that directory. But I guess it's also not as easy because sometimes different pieces of software share resources and it also has benefits to have your system config in one central directory.
Is there a 'perfect' solution to organize applications and libraries?
With the hard cutoff for Windows 11, you're right. I got a bit confused with the numbers and the order of events. But the story is true nonetheless. I even tried different versions of printer and scanner drivers, tried to extract files and feed INF files to windows, tried to learn about unified printing. But to no avail. And somehow I'm always affected by the Windows printer woes with my relatives. My mom once installed one of those quarterly (or half-yearly?) update packages and it made her Brother printer stop working for almost two months until something happened like another patch or something. I don't know if that was related to Print Nightmare, kind of fits judging by the time but I wasn't involved in helping my mom back then.
All I know my printer works. Sometimes it chews on a letter or complains about the counterfeit ink. But that's it. I remember times where I needed to wrestle with some old and badly-written Brother linux drivers myself. That certainly wasn't fun. But that's like 13 years ago. I don't know if the (proprietary) printer drivers for linux improved since then or if I just made better choices upon buying hardware.
The Office compatibility has been a thing since I went to school. It's not that it stops working entirely or becomes completely unusable. It's just that it's a bit off. Things get out of place, A sentence or element vanishes into thin air or the bullet points change color or shape. Something like that. I always make sure to have exactly the correct fonts installed so everything could be rendered pixel-perfectly. But it won't happen reliably. And you're perfectly right you can absolutely open files with the newest, most recent version. That's not the point. They want the other person to upgrade. You and all of their supplier now use Office 365 and the company using Word 2007 is now unable to do business. That's the way around this peer pressure works.
Regarding the Ubuntu compatibility: Yeah, that's tough sometimes. At some point you'll end up with things like an incompatible libc. Or a major clash of pretty much all of the library versions. Glad you figured out you can supply libraries yourself. I've done stuff like that. I guess it's kind of a rare thing with linux that you can't up- or downgrade or install libraries alongside and also have a fixed binary without access to the source code, either. So if you manage to get into that situation somehow, you're mostly on your own and it'll take some time to figure it out. It's not uncharted terretory, but it's not fun either. I've also maintained super old Suse machines that didn't even understand NTFS because it wasn't invented back then. And some RHEL and 'frankensteined in' some stuff. Nowadays on more recent machines, I'd most of the time just put old software into a container that contains the old distribution with all the old libraries. And I'd be done with it.
I don't have my old PC game CDs anymore. I always wanted to try some classics from my childhood, like Midtown Madness 2, Need for Speed or Command and Conquer. I guess I can download them or ask some of my friends if they kept them around, and see if they still work on my Windows 10 laptop. I don't even have an optical drive anymore...
I think my perfect OS is a bit more sci-fi. I like the idea of convergence. And maybe some unified system with everything tied together. I've always been amazed by the way computers work in sci-fi. For example on Stargate they have something on their tablet and then swipe it up and show it to everyone on the big screen of the control center. Or swipe their results to the side and they get transferred to the console on the right where the other scientist starts working on them. I know that things like that are a thing in the server world where you can pause VMs and transfer them onto another cluster. 'Hot'. But damn would that be useful at home. I could work on something, make amendmends on my phone, then transfer it onto the beamer to show it to a co-worker. Start watching a audiobook in the train and at home it'd automatically transfer to the stereo. Same with YouTube videos that I could show to my partner or grandma easily on their TVs. I know stuff like this exists. But it's all very specific, works with one kind of media and never across different vendors. And instead of doing this in a similar, abstract and transparent way, each piece of software needs it's own way of synchronizing data in the background and storing it on one server to simulate something like walking from your laptop to your PC and resuming work. (Or collaborating.) And all the instant messengers are incompatible.
There are 'distributed operating system's like Plan 9 that have interesting concepts. But they never took off. And today, technology gets more and more interconnected. We need concepts like edge-computing. Data available 24/7 from everywhere. And everyone has like 5 things that are basically a computer. And 10 IoT devices.
And I'd like to come home, throw my laptop into the dock and then all data is backed up and available. I can resume the video that I started on my phone, transfer it to the big screen in the livingroom. And ask my smarthome to look into my partner's calendar and make an appointment with them and my brother-in-law. And then sit down at a monitor to play a game. Please make everything update itself so it won't get hacked and I don't have to worry about keeping 5 computers, two routers and 15 IoT devices up to date and being involved in the maintenance, and make it interconnect across vendors and platforms. And just 'restore' on the next device I'm going to buy.
I think more important than the OS itself is the platform that goes with it, because that's the thing we interact with.
I'm kind of a stubborn person and I also like my freedom and like to stay in control. So this interconnected and distributed operating system would need to satisfy the four freedoms of free software. I personally won't submit into an ecosystem like the golden cage which Apple sells.
Yeah. Media literacy and computer skills have taken a hit. And this has and will have consequences. I hope people realize we don't always have to settle for some least common denominator.
The proprietary nature of Windows keeps many of its tricks under wraps. I think many people read about the detailed blogs and news articles Linux inspires and comes off thinking Linux is the obvious superior piece of technology. You used to get tons of books about the Windows internals, but most people writing those books have been hired by Microsoft so you get fewer of them these days.
Windows 9x was absolutely unstable and Windows NT has been the victim of shitty developers. Even in the 9x days, very few crashes came from products written by Microsoft itself in my experience. Linux has the same issue: see the Nvidia driver in just about any facet of computing, from power management to simply providing a basic API for things like Wayland. Windows XP is where Microsoft discovered the problems with their 90s kernel design, and in Vista they fixed a lot of them (user-mode GPU drivers, user-mode USB drivers, all that jazz! The entire GPU driver can crash and all you notice is a quick black screen and programs using hardware acceleration freezing). Vista was obviously released before it was finished, but 7 is where these features began to shine. The 32/64 bit boundary was actually not that big a problem, because Windows already ran on 64 bit all the way back in the 90s. It took a few years for Linux to be available on as many architectures as Windows was.
The backwards compatibility thing is mostly accomplished by putting version numbers in the DLLs and their loading mechanism, and using hot patching through the compatibility layer to put workarounds for programs that don't support them. Microsoft has a vast database of old executables with custom-developed patches and workarounds at the API level for the most important software. For all other software, multiple versions of the DLL are loaded into memory and applications get linked to the version they desire.
Inside a Windows install, you'll find a huge WinSxS folder. This side-by-side assembly does a lot of the heavy lifting when it comes to versions and compatibility. It used/used to use a lot of hard links, so Windows Explorer would get very confused at the size. MS stopped using WinSxS for their own redistributables, but there are still plenty of system libraries stuck in the system.
For redistributables, Microsoft has switched to the same system Linux has: versioned DLL files. Unlike most Linux distros, though, you can keep many versions installed next to each other. Sadly, many Linux programs link to the unversioned DLL, which means breakages galore whenever you update, and old versions of a library will often fight for the right to be the "real" libabcdef.so. Nobody can decide how to solve the versioning issue in Linux because there is no central authority for this stuff, and that's part of the reason why it's so hard to run old executables.
The new fix, just shipping every library with every application, as you stated, isn't great either. Flatpak does a lot of file deduplication (much better than Docker's image level deduplication) so it's not as bad as it seems, but I'd still rather have the libraries provided hy the OS itself in use than have a second copy of the OS especially for running GIMP.
The thing about tools like Qt and zlib is that Windows comes with all that stuff out of the box, and has done so for decades. There's no need to track down the right version of libcurl and libgzip because the target OS has all the functionality you need. Qt is replaced by MFC/ATL/Win32, libgzip is replaced by the Windows compression API, DirectX and its many shapes replace SDL and a bunch of GPU libraries, the list goes on for ages. Almost any Linux package beginning with lib.* has a Windows equivalent in the standard API that's guaranteed to work the same for a couple of years at least. You don't need to deal with a package manager to update them, because Windows Update does that for you. That's why Windows doesn't need a separate package manager for 99% of the binaries apt/dnf/pacman pull in. They still pack winget with Windows 11, though (it's available but not enabled by default in Windows 10)
All configuration happens in the registry. Gnome tried to do the same, which is where dconf comes from, and it's honestly even better. Microsoft was sick and tired of Win3.x ini files everywhere on disk and set up the registry as a central key/value store. It lacked documentation at the time of invention and to this day you'll need MSDN to find out what all of the settings mean, but on the other hand you only get one single configuration file for your entire system. This forces programs and the OS itself to remain backwards compatible and write migration tools rather than just changing up the config file type.
The software distribution problem is actually something Microsoft is trying real hard to solve. The Windows Store can serve any application (not just UWP stuff) but users don't seem to want to use it. There's a modest fee required to use it, so a lot of free stuff avoids the store, but it solves the distribution problem the same way the Mac app store does, and it even includes Android apps for good measure. Store applications are kept inside their own little sandbox just like apps on other platforms. The solution just doesn't seem to stick.
On the other hand, Linux and MacOS do introduce annoying problems like "where do I put user only programs". MacOS has executable folders to make your life a bit easier, but you still end up with a folder full of random stuff. Linux has the XDG standard for storing stuff in ~/.local and ~/.config, but when you try to use that you'll find many programs don't even bother to try to follow the XDG spec because they decided it's wrong and nobody is forcing their hand. The Windows solution (put everything in program files) isn't amazing either, but it works in most cases.
Another annoyance is the lack of programs using MSI files for installers. An MSI installer can be written declaratively, with install and uninstall steps for adding and removing files, and even allows for repairing damaged programs, but everyone wants to write their own self extracting installer. This happened in Linux too, where Oracle wrote a binary installer for Java and VirtualBox guest drivers, and Nvidia still had a weird installer on their website. The APIs and abilities are all there, but programmers choose not to use them, either out of ignorance or out of laziness. Furthermore, Linux had AppImages these days, which behave like MacOS' executable folders in a way and can be put in an Applications folder if you want. I store them in ~/.local/bin myself.
I think the Android style app containment is the best solution so far. It combines a rich OS with tons of APIs (similar to Windows) with a sandboxed environment easily managed by the user. It's not perfect (sharing libraries is possible but only for apps with the same signature) but I think it's a good idea. Flatpak and Snap are both trying to solve the problem in a similar way, and perhaps after a few more years of teething issues we'll end up with a great solution. Having been directed to a Flatpak only system on the Steam Deck, I've honestly changed my mind about the way Flatpaks work, though the many Nvidia huge driver containers still irk me to no end.
As for your printer issue: I know the feeling, printers just suck. I've had as many fights with Apple's CUPS on Linux as I've had with Windows' shitty drivers. For many printers, just right clicking them and clicking "install" from the network center just seems to work. For others (especially the modern ones) you need stupid workarounds. The ancient laser printers that work flawlessly once the software runs are all dependent on drivers that were buggy when they were released in the 90s and Windows has since fixed a lot of security vulnerabilities in its print system that not every printer driver likes.
I've honestly considered setting up a Raspberry Pi in readonly mode to fix the printer issue on my dad's laser printer because the HP driver disappeared from the internet, but after extracting it from a backup or the driver CD everything suddenly worked.
I honestly don't recognise your Office problems at all. I've used every Office version between Office 97 and Office 2016 in incremental fashion, and documents always just seemed to work right for me. You can even interoperate with older versions by specifically saving files for an older version, which many open source alternatives simply can't do.
That said, with the HUGE attack surface of Microsoft Office, you really shouldn't be using versions that are out of date. Just for security reasons alone I wouldn't want to deal with a company that still used Office 2007 everywhere. Year-branded Office releases receive 5-10 years of updates (depending on the version, they're clearly marked online) so you know exactly when you should be buying a new license. As a business, the price of Office really shouldn't be what's killing you, and the same is true with Windows licenses. They're investments into tools and business continuity.
The reliance on Office rather than alternatives is annoying for those using LibreOffice and such, but there simply isn't a better offline suite available. Office 365 and Google Docs are the way to go these days in terms of MS Office competition, and neither are a great solution. I use the open source stuff, but I can't deny that it's worse in almost every way other than the user freedom part, and that includes some security considerations.
I share your dream of a connected computer ecosystem! I've drawn up diagrams of a concept to basically share an application between mobile, desktop, and other form factors, based on the Android sandbox and leveraging the cross platform nature of the JVM.
(character limit, cont'd) Those few hundred megabytes of state applications have should be easily shareable over WiFi, and in a perfect world they should be streamable as well. I want a system where I can basically throw my screen onto another and stream what I'm doing, or transfer it when you want to take my work on the go.
Sadly, nothing usable for normal computer users is ready for such a system without extreme containerization and sandboxing efforts, but it's still my dream to one day be able to do. Plus, you'd need to deal with the different control methods that TVs/laptops/phones require, and I think only GTK has a workable concept for that so far.
Microsoft clearly wants to move Windows to the cloud entirely, and that's one way to implement the "throwable" applications for sure. RDP support running single applications remotely, so by making everything a client to a mainframe, your entire workflows could be shared uninterrupted, while being able to render specific applications on specific screens only. I'm not happy that this is all cloud based, but a mainframe like setup for home computers could work on Linux too if the streaming capabilities are implemented right.
The big problem with computers in general is that they've become tools. They need to be easy and safe to use for the general public, they're no longer just cool things to tinker with. Worry-free security comes with vendor updates, and vendor updates come with a lack of freedom unless you buy open source.
As for IoT crap, the EU is going to force products, both hardware and software, to get patched, or to get pulled out of shelves. A bunch of open source people protested this bill (they were on the hook for maintenance, mostly because they sell consultancy and support on the side) but I think this law has the capacity to solve the IoT shit problem, or at least start solving it. Stores will think twice about the products they stock when part of their inventory becomes worthless when a company refuses to publish security updates.
From the user interface or specifics, idk. They're all pretty much alike and follow very similar concepts. So I don't care too much. Sometimes an interesting change pops up like when Android started using gestures instead of buttons for 'back', 'home' etc. I have a Thinkpad with those pointing sticks so I don't need to lift my hands from my keyboard. And I pretty much like the concept of the Gnome destop where I just bump the corner or hit the Super key and start typing the initial letters of the name and hit enter. Other than that it mostly stays out of the way. And I like the command-line interface and configuration files. I think it's vastly superior to digging through menus and remembering where to click with your mouse. And it has more advantages once you automate stuff, deploy it somewhere etc. But I think nowadays everyone agrees with that. Even all the windows-admins in my circle of friends have started to be glad about the PowerShell.