Hi everyone. Today let's talk multiplatform support.
First off some main points before we dive in:
- We are changing macOS and Linux support from a long-term goal to something we are starting now.
- For Linux, we will be using Proton
- For macOS, our initial support goal is M1 Macs
We always knew we wanted to support more platforms eventually, but we've decided to move it up the roadmap. The reason for this is that we want to get modding to you asap, and we don't want multiplatform to throw a spanner in the works after the community has already made a bunch of stuff.
This doesn't mean that multiplatform will necessarily ship before modding, but instead that we are spending time getting dev builds working so that we can see what kinds of issues will show up when handling Mac and Linux.
As a long-time Linux user, I feel like I'm in a bizarro timeline saying this, but the Linux port of our game looks like it's going to be relatively easy.
Thanks to the decades of work from the Wine community and the recent work by Valve, TaleSpire runs pretty great out of the box on Proton. There definitely is a performance difference compared to Windows, but it's already very playable considering that we have done nothing to support this. 
The one notable Linux-specific issue we are currently aware of is that the custom URL integration doesn't work. However, Doskious from the community has already documented a fix, so we just need to generalize it and make the installer do it for you.
Before we get too far ahead of ourselves, though, we still need to work out some other things.
Firstly, we need to find out how to make a 'proper' Linux release for Steam. The documentation seems rather light on these details.
For the sake of sanity, we'd usually want to pin the version of things like Proton. This ensures that what we are testing reflects what will be running on players' machines. Speaking of testing, see the 'Practicalities' section below.
Given that we are looking to ship for Linux, I'm sure the question of the Steam Deck will arise. Supporting a handheld well requires a lot of user experience work (amongst other things) and is well outside what we have time for right now. We only feel comfortable pursuing the multiplatform goal so soon because it fits within our Kickstarter's long-term goals. We have a duty to our backers, and we are intent on keeping our promises.
So for Mac users, I expect the big question is probably "Why start with the M1 Macs?".
The short answer is that we only have two programmers, and each new configuration is a lot of extra work. Focusing on one architecture first makes this process feasible for us.
As mentioned in previous posts, TaleSpire isn't optimized for integrated GPUs yet. This means if we started with pre-M1 Macs, we'd still only be able to support the ones with dedicated cards, and we'd be ensuring that if you upgraded your Mac to M1, the game would stop working.
As for the ugly practicalities of the market, we know that in the time it takes us to ship macOS support, the percentage of the Mac ecosystem that is M1 based is growing. Apple has made it very clear where they are heading hardware-wise and that the base M1 is their new entry-level for their machines.
Online we often run into people suggesting that when using an engine like Unity or Unreal, porting to a new platform is as simple as rebuilding your game for that platform. In reality, though, this is rarely the whole story. 
Even when using an engine, you often end up with custom or platform-specific parts to your game to do something technically interesting. Switching platform often means that you will need to research and write new approaches for those game components. 
In fact, we have already installed the Unity 2021.2 beta with M1 support and got the game 'running', but it's very broken and not even close to being shippable!
Let's list just six of the many things that need resolving:
- Performance is poor, even on small boards
- Release builds are currently significantly more broken than in the editor
- Our pixel-perfect picking approach has DirectX specific code to allow performant read-back from the GPU. We will need a version for Metal.
- Unity with M1 support is still in beta, so there are bugs.
- Login doesn't work. For this are waiting on the next release of Steamworks.Net which adds M1 support.
- Myriad graphical glitches.
I want to stress that this is not unexpected or unusual. This is just part of porting. Different architectures are going to have different places where they excel and struggle.
Great, so let's get into what to expect next.
We know that this is a lot of work, and we need to ensure this doesn't keep us from our other goals.
Our primary focus for this endeavor has to get modding working, and usable ports are a secondary benefit.
We are not giving estimates on any dates for this process. Not doing so keeps us free to react to discoveries as we make them. This fact is what allowed us to consider doing this at all!
When we make Linux and macOS versions available, they will be considered experimental and will be treated as such for a while. This is especially relevant for testing.
When we start, we will only have the bandwidth for minimal testing in order to keep releases frequent. We will limit ourselves to things as simple as making sure the game starts and that we can get to a board.
Linux provides its own hurdles here as there are so many potential OS/DE/Drivers/Hardware configurations, etc. We do not intend to even try to do comprehensive testing for now. We will perform simple tests on a relatively stock Ubuntu machine and leave it at that . It's far from ideal, but we know we have to be realistic with you about what we can achieve in the near term.
Good news for modding
So much of this post has been us trying not to oversell this change or mislead people. So reading back on it, some of it feels like a bit of a downer. Given that, I'd like to leave on some good news that has already come from this.
We've already been able to show that the asset packs that we built for Windows worked out of the box on Linux and Mac. This is excellent news as it means that when you release mods, they don't need to have versions for every platform. This keeps mods smaller and less likely to cause rifts between different platforms of what content is available.
We, of course, need to test this more and make sure it would work in the opposite direction too. However, it's all very promising.
This has been quite the info dump, so let's wrap up for now.
We're very aware that we have had to skim over many details, and there will undoubtedly be some seeds of confusion amongst this post. If you have questions, please feel free to reach out to us, and we'll do our best to help.
Have a great one folks.
 We will eventually explore using Vulkan, as Proton documentation suggests it gives performance improvements over using DXVK. However, we are not doing this yet as it affects other systems and would add *significantly* more work before we can ship.
 We are already seeing M1-Pro and M1-Max coming down the line for MacBooks, and it feels inevitable that the Mac Pro towers will go the same way in time.
 Although it is undeniably awesome how much does 'just work'.
 As just one example, the pixel picking in TaleSpire requires the use of `D3D11_USAGE_STAGING` with a compute buffer to read the picking result back from the GPU without stalling the pipeline. As this isn't exposed in Unity, we made a C++ plugin to do that. This is supported perfectly via Proton, but we'll need to write a Metal equivalent for macOS.
 We'll release the specs of the Linux test machine we use closer to the time. For macOS we are using the 24" 8-Core CPU, 8-Core GPU, M1 iMac
 This is down to TaleSpire only using particular things from Unity asset bundles which are the same for all platforms (e.g. meshes).