this post was submitted on 25 Nov 2023
79 points (91.6% liked)
Linux
48143 readers
727 users here now
From Wikipedia, the free encyclopedia
Linux is a family of open source Unix-like operating systems based on the Linux kernel, an operating system kernel first released on September 17, 1991 by Linus Torvalds. Linux is typically packaged in a Linux distribution (or distro for short).
Distributions include the Linux kernel and supporting system software and libraries, many of which are provided by the GNU Project. Many Linux distributions use the word "Linux" in their name, but the Free Software Foundation uses the name GNU/Linux to emphasize the importance of GNU software, causing some controversy.
Rules
- Posts must be relevant to operating systems running the Linux kernel. GNU/Linux or otherwise.
- No misinformation
- No NSFW content
- No hate speech, bigotry, etc
Related Communities
Community icon by Alpár-Etele Méder, licensed under CC BY 3.0
founded 5 years ago
MODERATORS
you are viewing a single comment's thread
view the rest of the comments
view the rest of the comments
I’m a student, and I play games. So mostly I’m doing MS Office and Steam, but I’ve got a lot of random niche stuff I do too. Like I’m using Unity to develop a HoloLens app for a research lab, and I just use VSCode as my IDE. I use Bitwig Studio for audio production, Blender, Freetube, and some proprietary software from my University.
I guess I’m just wondering about compatibility issues I might face, and how to approach those. Are there just some programs that I won’t be able to use on Linux? I’ve heard about Wine, but it all feels conceptual. Like you ‘use’ wine to run windows programs but what does that mean? Do I run it like a VM? But it’s not an emulator?
I’m used to going to the internet, finding an .exe, and installing programs. But Linux has a package manager that you should do that through instead? But I’ve also seen a bunch of download links for Linux software online, so is there a difference in downloading something from the internet and installing a ‘Linux’ version of it, or installing that through a package manager?
Sorry I’m all over the place, i think my brain is a little scattered trying to figure everything out at once haha
you wont be able to use ms office, so either use alternatives or the web version(or through a vm)
for most software you want to use the packages provided by your distribution maintainers, as that removes the need to deal with conflicts, often provides some sane defaults and makes it so that for the most part you only have to trust the team of maintainers rather than every software developer in the world.
also you wont be able to play valo and some other shooters, though eac and battleye are both supported and besides native and wine/proton support u can play most games on kvm passthrough vms with little performance loss
No worries, it's a lot of details to take in having never been part of it. The thing about the open source world is that there's no central authority figure to say "this is what we're doing, stop doing that other stuff". So instead, anyone can do anything without consideration for what else is out there.
So yeah, package managers are one way to install software, there are many different package managers out there, and virtually every distro ships with the one that fits their design philosophy best. Package managers tend to point to a set of repositories (servers full of packages) that are managed by your distro maintainers. Depending on the package manager, a "package" may be a pre-built binary, or it might just reference some source code and scripts to build it. Either way, the purpose is to make it easy to install packages that someone has theoretically taken a look at and given a thumbs up to, indicating that it should work on your distro, in combination with the other packages in the repo (theoretically).
But not every single binary out there has been inspected by every distro maintainer. There are often licenses that prevent them from re-hosting proprietary binaries on their servers, and even if the license is permissive, it's not uncommon for maintainers to disallow packages that aren't open source. So ex. Discord has a Linux binary you can download and use, but it's not commonly served from a package manager.
"Wine Is Not an Emulator" because it's not emulating hardware. At the end of the day, windows and Linux are both running on your x86-64 CPU. In theory you should be able to point the Program Counter at the first instruction in a binary, and the CPU won't care which OS it's running on....until it tries to make a system call, or jump to a windows-specific dll. Wine basically tries to create an environment so that when a binary tries to do something that is normally only offered by the windows runtimes, there is code loaded to do what it expects.
These days, I recommend trying out Bottles to run arbitrary windows apps. It's user-friendly, you create "containers" for specific windows apps, and it uses wine under the hood.
And then you have things like "flatpack" which are kind of like package managers where the package is a bottle/container, but the software it runs could be for any platform (Linux or windows). There are pros and cons to this (pros usually being stability, cons usually relating to the size of the containers on disk).
There are people who are adamantly for/against each thing, which is why distros exist in the first place. That's just how the open source world works. I recommend finding something that works for you and not feeling obligated to worry about the 10 other ways people have gotten it working.
Good luck!
None of the comments here explain how WINE works, so allow me to elaborate a bit.
WINE is like a translator or a compatibility layer. When a Windows program tries to perform a function that would normally require Windows, WINE steps in and translates that request into something the Linux system can understand and process.
As you may know, Windows programs work by making API calls (eg using Win32 APIs) to operate and perform basic tasks. WINE takes these API calls and translates them to their Linux equivalents (POSIX calls, to be specific, which means Wine can run on several Unix-like systems). This way, when a program asks to say, open a file, or display something on the screen, WINE converts these requests into a form that Linux can execute.
WINE's approach is about providing compatibility for user-level applications rather than replicating the internal workings of the Windows kernel. It includes various libraries and components that mimic the behavior of those in Windows. This helps in executing the Windows applications as if they are running in their native environment.
The core of it is NTDLL. NTDLL.dll is a core Windows library that provides low-level system functions to interact with the Windows NT kernel. In WINE, ntdll.dll is adapted to work with the Linux kernel instead.
Then you have the Win32 API libraries, providing the basic APIs that Windows applications use for functions like window management, text rendering, and system calls. Examples include user32.dll (for user-interface functions), gdi32.dll (for graphics device interface functions), and kernel32.dll (for basic system functions).
Shell32.dll for handling Windows Shell API functions related to file operations and the user interface.
DirectX Support, for running games and multimedia applications. WINE implements parts of DirectX, like Direct3D for 3D graphics, DirectDraw for 2D graphics, and DirectSound for sound processing. Note that WINE's implementation converse Direct3D calls to OpenGL, whereas there are community projects like DXVK and VKD3D which translates these calls to Vulkan.
Finally there's a Registry Implementation, so that applications that need to read or write to the registry can function correctly.
Of course, there's a LOT more to it, the above is just an example of some key components. Basically Wine has reimplemented (coded from scratch) various libraries and executables that, on the outside, look like standard Windows dlls/exes, but internally they use POSIX APIs to talk to the Linux kernel and other POSIX components. This, along with the Syscall translations, bridges the gap between Windows programs and Linux.
Now naturally, this is neither a perfect, nor a complete implementation of Windows APIs; plus there are some things which Wine will never implement (such as ntoskrnl.exe), so not every program will work as expected - so check out the Wine AppDB for compatibility reports with various Windows apps.
Installing with a package manager is easier, since it handles stuff for you. You'll usually only download software from your browser if it's not available in your distro's package manager.
Package managers may have multiple repositories, these are like lists of packages, and may differ from distro to distro.
A good analogy is thinking of a package repo (short for repository) as a library, and the package manager a librarian helping you search for a book.
It's a compatibility layer, to put it simply (since I'm not a WINE expert) it converts Windows stuff to Linux stuff, instead of straight up running a Windows VM.
Bitwig and Blender work great on Linux, as well as most games. MS Office and the proprietary apps will need a separate Windows install. Wine is a compatibility layer that essentially translates the Windows files into something that your Linux OS can use. It works great for some things, like games, but isnt recommended/doesn't work for others, like Office or Adobe suite. Personally I'd recommend finding the alternatives for the programs you need on Windows and trying them out, while keeping the original programs in your Windows install. You can get used to the workflow of the new programs and decide if switching is a viable thing for you. And if not, hey now you're comfortable with another set of programs just in case you need them in the future.