Now that the code for Command & Conquer Generals (along with other classic RTS games from EA) is open source, the community is working on getting it working natively on Linux without the need of Wine / Proton.
One of the forks on GitHub, from Fighter19, is quite active on expanding and improving the game, and the developer of the Steam Play tool Luxtorpeda Dev (d10sfan) has been helping fixing up and implementing Linux support for Command & Conquer Generals (and Zero Hour). It's all still a heavy work in progress.
What is Luxtorpeda? It's a Steam Play tool (like Proton) that allows you to run games on Steam via a Native Linux build if one exists for it. The point is it keeps it all inside Steam and gives you what is usually an updated game engine, like OpenMW for Morrowind and now Command & Conquer Generals too. You can check out my previous article about Luxtorpeda being used on Steam Deck as an example.
The Luxtorpeda dev, d10sfan, let us know that while it's still work in progress the fork has been added to Luxtorpeda so now you can try Command & Conquer Generals on Linux with this native code.
Pictured - Command & Conquer Generals Zero Hour on Linux
To play it you still need to own a copy of Command & Conquer Generals.
You can use ProtonUp-Qt to download Luxtorpeda, then set it was the compatibility tool for Command & Conquer Generals Zero Hour on Steam in the Properties menu.

Looks like you can only buy it as part of a bundle on Steam?
More or less seems to be true, though I found via checking the store page in incognito mode that that there's EA Play subscription option. Probably not good deal though.
Had no idea that Steam has forced bundles.
Does anyone know about game development? I wonder how making a native linux version works? I know art assets are the same so that shouldn't be different. I am guessing the difference is in code and linux reads certain things different than windows? What parts of game development are different for a native linux version vs windows version?
We do have some software developers here (including me) and also some game developers I think (not including me). You can do a lot of stuff with Windows means (Windows API) or Linux means. The biggest chunk would probably be all those graphics calls, that for Windows games usually use DirectX, which is not available for Linux. There are translation layers though which they could use that automatically translate from DirectX to say OpenGL. A minor problem should be that Windows tries to use file names case insensitive (which works for the basic latin alphabet, but is not possible to do for every language) while Linux doesn't, so you might have to adjust file names and file calls.
Last edited by Eike on 1 Apr 2025 at 8:20 am UTC
I had to write (actually hack) a tiny wrapper over the file names to « simulate » how Windows (non)handle characters.
To avoid constant FS check, I also had to write a tiny relation cache system when a file was actually found.
In the end, we though it would be more interesting to parse the packed data at startup and create the file name relation map on disk once.
Good luck ! I can’t wait to play CnC GH again !
See more from me