Granted there is a ways to go to beat Windows in this space, but the progress over the last 6 years generally and the last 6 months specifically is astounding.
[1] https://www.reddit.com/r/linux_gaming/comments/9qopag/5000_l...
Granted there is a ways to go to beat Windows in this space, but the progress over the last 6 years generally and the last 6 months specifically is astounding.
[1] https://www.reddit.com/r/linux_gaming/comments/9qopag/5000_l...
10 years ago developing on linux as a game developer was way worse than windows and MacOS, now there is no real difference at all. I speak as a long time UNIX user, Linux was terrible for C++ devleopment, debugging and asset creation/viewing (compared to the others) making gamedev tougher than it needed to be.
10 years ago linux's OpenGL drivers were behind even MacOS and way behind Windows OpenGL which was behind DirectX by quite some way. Now Linux's drivers are fairly good although it's still a nightmare upgrading radeon drivers and NVidia's drivers seem to be fickle. This leads to a lot of bugs from users and supporting various distro/hw/driver combinations.
Libraries like libSDL(2) were less mature 10 year ago, multi monitor, input and sound support were patchy because the Linux landscape was fragmented and buggy. Now libSDL2 is pretty much spot on. Mutli-monitor is doable (not as good as macOS but as good as windows), input is pretty good and sound is OK (but most people use FMOD which is superb).
Where Linux falls behind is deployment. No I am not going to ship my source for you to compile. itch.io and Steam go a long way to make it easy to deploy and crucially update the game. It's still a PITA to deploy a compiled app on Linux with unclear glibc versions and amazingly it's worse than MS DLL hell of MSVC redistributable shambles.
It's not impossible to overcome but it's a PITA for a small market. Not a good position to be in. I support macOS and Linux as well as Windows because I believe in plurality but I can see why many chose not to. Don't think that using Unity or Unreal make anything easier either. In many ways they are worse than a well written custom engine.
I currently have eight VMs each with different distros. Mostly it's for testing library compatability on install and input weirdness.
That's a lot of testing.
From what I understand about Snap, the only difference is that that the One True Repo is installed by default.
AppImage is another option he could consider, which requires no repos or additional installs, just flipping the execute bit on the AppImage file. Unfortunately even that is spotty because there is no standard set of libraries to rely on like there is on other platforms, so he'd pretty much have to include everything from glibc up to be safe.
If you don't want to worry about the glibc version on your users' machines, you can just ship your dynamic linker and use it to run your executable in your wrapper script (you do have one, right?). Why's that so hard?
Having said that, I strongly prefer Linux's explicit shared object search paths and very user-friendly dynamic linker to Window's implicit search scheme (aka the DLL hell). If that means I need to add my dynamic linker along with a couple lines of wrapper script so my binaries work, so be it.
And, you can even avoid the wrapper script if you can make sure your stuff is always installed to a standard location (eg. /opt/yourcompany) and you pass -Wl,rpath to your linker (at compile time) but I really don't see the point.
If Linux Desktop were one singe different platform there wouldn't be a problem. Instead it is effectively some ridiculously large number of platforms.
* If you're a GUI app you can also speak X11 with GLX and its up to the user to have something that understands your messages.
* If you want desktop integration you use one of the many dbus protocols and it's up to the user's DE to understand your requests.
* If you distribute through Steam you may also depend on the Steam runtime, but you have to be careful to only depend on what's provided.
* If you distribute through Flatpak or Snap you can also depend on any of the provided runtimes or build your own for maybe easier maintainability. It's essentially 'bundle everything' as a service.
tl;dr depend on protocols and runtimes, not libraries.
Also, nothing is stopping you from building against Ubuntu:latest. It's more cumbersome but Linux users will typically find a way to make your stuff work on other distros.
This is not the mentality of anyone who cares about the user experience of the product.
One option is to statically link against musl libc [1].
The kernel ABI is about the only stable thing you can rely on (which is something you _can't_ rely on for macOS or Windows).
https://stackoverflow.com/questions/3430400/linux-static-lin...
Can't imagine many Linux gamers are going to need NSS support in their game binaries. It's a bit of a stretch to say glibc doesn't support static linking, perhaps "officially" it doesn't, its just not all the extended features are going to work.
Static linking is generally going to be frowned upon these days however since you're effectively linking security issues into the binary forever.
glibc unicode tables are huge, musl are tiny.
glibc uses assembler optimizations for everything, whilst musl uses compiler auto-vectorization, which mostly beats handwritten assembly, esp. with constant arguments.
In Windows's case, technically accurate but not really relevant, since the interface for working with the base DLLs like kernel32, user32, etc. hasn't changed.
What's the gap between Linux/Windows and Mac OS ?
Windows is finally introducing a diagnostic in the task manager to show which applications have high DPI support. The modern option, per-monitor awareness, isn't even possible on Linux with the X display server - it requires Wayland.
Wayland isn’t an option for me yet because I need screensharing under Hangouts, etc.
You can’t mix the HiDPI internal screen with, say, a 1440 external monitor with Gnome on X11. Scaling is applied equally across both.
Also if you drop back to plain text e.g. during boot up the internal screen will show text at 100% scaling and the text is tiny.
I guess that might be something BIOS could take care of but it’s currently a problem.
Sorry, can’t offer comparisons to Windows, I just work with macOS and Linux.
I currently use Linux and it is much better than Windows (although I didn't like the desktop environment so I uninstalled it, but customizing the system is what I do regardless of what operating system).
Even with Switch's adoption of Vulkan, most games are actually using middleware that makes use of NVN.
If a platform is relevant to professional games developers, they will target it, regardless of which APIs and OS it requires.
That means that early on, yeah it's as bad as Mac, but it gets way better over the lifetime of the console.
And that's before getting into the release of Metal 2. There's a non zero amount of work to support it, and it's not clear how long Apple is going to support Metal 1.
And all of that is before all sorts of other crazy stuff with Apple changing their app signing requirements, messaging that they're going to require all apps to be signed by Apple in some future macOS release (but won't tell you when that is).
Unreal, Unity, CryEngine, ...
I wasn't talking about in-house solutions, rather engines that many AAA studios buy in order to actually focus on the game itself.
As for the rest of your remark, it comes up in places like HN, but not at all when attending local game developer meetups, developer articles on Making Games, Gamasutra, Connection, IGDA, or many other professional publications.
And to pretend like FrostBite doesn't matter is ridiculous.
Whereas the ones I listed do support those systems, Apple platforms, Android and GNU/Linux.
Also, just noticed that you lumped in Unity with AAA, lolz. What's next libgdx?
There are plenty of other AAA studios using Unreal, Unity, CryEngine.
Maybe you should check again the names of some studios using Unity, ever heard of Nintendo and Microsoft?
> There are plenty of other AAA studios using Unreal, Unity, CryEngine.
Blizzard's focus had been on Mac in addition to Windows. With the switch to Metal, they're probably abandoning it. FrostBite means that EA AAA games probably won't either. Ubisoft didn't release Assassin's Creed Odessey on Mac. And even looking at Unreal Engine 4 games, only Fortnite and a twoer defense game have been released for Mac. Looking at CryEngine, no games have ever been released for Mac. So where is all this AAA support for Metal that you're talking about?
To lead you to water, Mac support is a nice to have so that their in house tools work with the artists' platforms they're used to. But they don't care enough to finish out the QA, or put in any work to make the game actually shippable on that platform. The switch to Metal means that you can't justify it with "well we can just support OpenGL and get Mac for free" like they used to.
> Maybe you should check again the names of some studios using Unity, ever heard of Nintendo and Microsoft?
AAA is about the games, not the studios. Name a single AAA game on Unity.
It was about three years ago, that through pseudo public channels, that Apple started messaging that OpenGL was on it's way out. Oh, look what Blizzard game came out (Overwatch) which has pretty flagrantly disregarded the idea of Mac support, even entertaining the idea of possible switch support.
So support or not for Metal is not the real reason why they don't want to focus on the Mac.
As for games, Nascar Heat 3, for example.
> So support or not for Metal is not the real reason why they don't want to focus on the Mac.
"But they don't care enough to finish out the QA, or put in any work to make the game actually shippable on that platform.". Mac was a fixed platform, and you used to be able to justify the engineering because the work ultimately helped make your Windows port better ("the end user will have a way out if there's a bunch in their DirectX drivers"), and let your artists do all the work on the tools they were used to. Then if you're running your tooling on Mac, you've been supporting it the whole time and there's very little QA overhead for release since it's a relatively fixed platform. That last part doesn't apply to Linux. This whole time I've been saying it's not just OpenGL->Metal, it's a Nexus of several things all coming together to break the camel's back.
> As for games, Nascar Heat 3, for example.
You know that a game that's less than $50 at release isn't a AAA game, right?
Fortnite - F2P, so different enough business model that you have to take that into account
Hitman - $59.99 on console
GTA - $59.99 on console
Assassin's Creed - $59.99 on console
Nascar Heat 3 - $49.99 on console
Are you still going to pretend that you don't see the difference here?
Are there really no games out there that program their own graphics anymore and don’t rely on “middleware” engines? This seems shocking to me. Then again I was shocked the first time I learned that most games don’t hand-code assembly anymore. Things move so fast.
The actual set of 3D API is a tiny portion of everything that a game engine requires, among scene management, materials handling, graphical editor, plugins, sound, physics,....
So one always ends up with a pluggable rendering layer, where adding a new API is relatively simple.
Now what has been happening is that with production costs skyrocketing, most studios are increasable adopting external middleware that they just adapt to their purposes than writing everything from scratch.
For example, you can get Unreal and get support for NVidia's raytracing features out of the box, or invest the money to develop the same features from scratch in-house.
The culture in the games industry is that what matters is the story, gameplay, taking advantage of hardware features and getting the game out there, tech comes and goes.
And pricing is crazy. You can build a powerful rig for Linux gaming using way less money.
You can get a bunch of games working on either with Wine.