Every time someone mentions switching to Linux at home or using it at work, I eventually get asked “But what about my <insert windows application here>. Will it work on Linux too?”
Short answer: No.
Long Answer: Depends.
A fair amount of the software that users are familiar with -- like Microsoft Office -- have counterparts that are Open-Source. Microsoft Office's free doppelganger is Open Office, a program formerly maintained by Sun (now owned by Oracle). But of course there are some aesthetic changes and a bit of a learning curve.
So some of our software is available in the form of other free applications, but what if you have stubborn users, absolutely need a feature, or have a custom-built application that runs on Windows like restaurant or Point of Sale software?
Well, unfortunately Windows and Linux executables are not compatible. Why? Because some programs in Windows make use of Microsoft software built into the Windows kernel and it’s accompanying proprietary software libraries (DLL files). Imagine if a Windows program tried to access the registry on Linux -- it certainly wouldn’t work. Now imagine the program is trying to use Windows graphics to draw a prompt box on a Linux OS; The code isn’t there and it just won’t work.
This is where Wine comes in.
Wine is an acronym for Wine Is Not an Emulator. The acronym is recursive in typical UNIX tongue-in-cheek geek humour. Despite the playful name, Wine is a seriously robust tool and is one of the best ways to get Windows applications working inside of any Linux distribution.
This is because the Wine project has a collection of black-box engineered Windows libraries and code that Windows executables hook into. These DLL’s contain the code that Windows programs rely on when they want to do something as simple as display a new message box or make use of the hard drive, system hardware, or talk to the network. Some libraries are also used for drawing graphics for games (namely DirectX) and more.
Wine provides an environment that allows the Windows executables to get the code they need to perform their functions on Linux. It doesn’t emulate Windows as much as it translates Windows API and library calls into Linux API and library calls. In this way, Wine acts more like middleware than an emulation or virtualization environment. In fact, Wine describes their software model as a compatibility layer.
So Wine makes Windows applications compatible with Linux?
Yes, but this is way more complicated than it sounds (and it sounds complicated), especially when you consider how robust some Windows applications are, and the roundabout methods that the Wine development team has to use to avoid legal repercussions from Microsoft. This complexity means that Windows executables experience different levels of functionality as the various functions that Windows provides applications are re-created in Wine. This varying level of functionality has facilitated the creation a Wine application database, http://appdb.winehq.org/.
AppDB crowdsources application testing inside of Wine for various Wine versions and Linux flavors (the most popular being Ubuntu or Debian, which I highly recommend you use if you are trying to run Windows applications over Linux). Applications in the Wine database are rated and assigned a value based on how usable the program is. Applications that work flawlessly are “Platinum”, whereas applications that crash or flat-out don’t work are “Garbage”. A lot of popular programs are rated platinum or gold, including World of Warcraft (Platinum), most of the Windows Office 2007 suite (gold except for Outlook 2007), and many Valve games on the Steam platform (TF2, Half-life). These applications are frequently quoted to me as reasons why users will not switch from Windows even if they dislike it or find it difficult to afford, but with Wine running on Linux, it shouldn’t be much of a switch at all!
So how do we get the more difficult Wine applications to work? I need application X, Y, or Z and it’s got long instructions about how to configure Wine.
Well this is where the tricky part comes in. Wine has the ability to be tuned for applications for improved performance. I recommend looking on AppDB and attempting to find instructions on forums for running whatever particular application it is you wish to run if it doesn't run out of the box. Don't give up on it just because it didn't start up the first time. There are also a few important tools that can help you get applications running.
Winetools can help you get more than 90 Windows applications working within Wine by helping you to download and install the necessary additional software that some applications require but are not always advertised. It’s the first step in getting many harder-to-install applications to work inside of the Wine environment because it downloads Windows fonts and allows easier customization. Read what Wine has to say about it here.
Plays On Linux:
Plays on Linux allows users another Wine environment to install software in -- more specifically game software. It allows easier tweaking based around getting games like team fortress 2 or fallout 2 to install correctly and work better. I’d recommend it for any gamers looking to make the switch to Linux because of the scripts that automate game installs for many popular games.
I'm on board, but what about support?
Wine has several companies that use its code-base and provide support to users:
Bordeaux supports Microsoft Office applications, Adobe applications, Internet Explorer and “Consumer Video Games” out of the box. It’s worth checking out if you can’t afford the money for a Windows License and still need to run a Windows executable.
Oh, and Wine runs on Mac’s too. If you use your Mac for gaming, it could be a helpful tool for getting those older games with no Mac releases that aren’t already on Steam.