Port Zandronum to <Platform here>
Posted: Sun Sep 01, 2013 7:35 am
tl;dr: Hobby developers will only port their software to platforms they are personally interested in. The only reason Zandronum isn't on your favorite platform is the lack of developer interest.
Since these threads appear every now and then I figure I should write a proper answer and sticky it so that the rumors about our code base and/or porting policies don't needlessly spread. Also, I will first speak from the point of view of a ZDoom developer since it will simply some things a bit.
So you've stumbled across the world of home brew or you got some new phone or tablet and are about to ask if we will port our software to your device of choice. Do not bother to ask here since the answer is going to be no.
First let me get a few rumors out of the way. ZDoom is not a huge unmaintainable mess. It is a fairly complex piece of software with a lot of specialized parts and, due to the age of the project, there is a lot of code that isn't a picture perfect example of good code. No doubt about that, but overall a single developer can understand how most of the code works. People also seem to still believe that ZDoom is locked to the x86 architecture. On the contrary, ZDoom itself has been known to run on PowerPC, MIPS, and ARM. Yes ZDoom contains x86 and x86-64 assembly code, but it is all entirely optional!
Now that I just got done explaining that it would be easy to get ZDoom running on any platform, why would we not want to expand our user base? For home brew systems, the answer is usually that FMOD is not available for that system. Because of this the entire sound system would need to be translated to something comparable. We have no interest in doing this ourselves since from our research there is no suitable replacement for FMOD that won't provide a worse experience for our current users. There has been some work contributed for optionally using OpenAL, but the developer of that branch has not made any progress recently.
But what about Android/iOS/Windows Phone/Windows RT where FMOD is available? In these cases the issue is mostly that we have no touch screen interface. All of these platforms do, to my knowledge, have a way to connect a keyboard, joystick, or mouse to them, but from a user experience stand point one should not have to assume any of these devices are available. Further more for the best experience the platform specific back end should be rewritten to be native to those platforms (this isn't nearly as much work as it sounds since ZDoom already has the interfaces laid out).
In many cases, Android being a notable exception, there is the walled garden problem. App store policies generally assume that the app is stand alone and does not rely on third party data (game IWADs). I know Apple does not allow execution of user source code, so the iOS app store is definitely a no go even if freedoom or whatever was packaged along with it. Since the platforms do not support side loading out of the box, ZDoom would be limited only to jail broken devices which vastly shrinks the user base. Small user base means low developer interest. (Note that this is ignoring possible license politics, and no being GPL would not alleviate any of that.)
Now how does Zandronum differ from ZDoom? Given the age of our ZDoom base at the time of writing, Zandronum is still locked to x86 architectures. The reason is mostly known so it wouldn't be hard to fix this, but our current stance is to just wait until the ZDoom base is upgraded. Also worth noting is that Zandronum's code quality is significantly lower than ZDoom's. (If you ever wondered why ZDoom doesn't pull Zandronum's bot code, this is the reason.) This has caused some issues with type sizes being assumed and stuff like that. Again, not a huge problem, but for this reason I would highly recommend anyone interested in doing a port to start with ZDoom first. You will have a much higher chance of initial success. ;) Otherwise the only other issue could be getting the OpenGL renderer working, but that's optional code.
One thing that is definitely NOT the reason the ports don't exist is any disadvantage given by the platforms control schemes. This is usually mentioned by more competitive players, but the fact there are a lot of casual players that just don't care about that problem. For example, ZDoom and Zandronum provide above average controller support for a computer game because there are people that want to use a game controller for one reason or another.
To conclude, don't bother asking here for ports to other platforms. If one of us becomes interested in a platform we'll just port it without being prompted. Instead find a community for your platform of choice and see if there's anyone there interested in doing the port. Perhaps this is a good reason to get into programming so you can do it yourself! Provided the code changes are done right there's no reason we wouldn't accept the port upstream, and if it isn't too hard to set up a development environment for it's possible we'd even maintain updated binaries once the port exists.
Since these threads appear every now and then I figure I should write a proper answer and sticky it so that the rumors about our code base and/or porting policies don't needlessly spread. Also, I will first speak from the point of view of a ZDoom developer since it will simply some things a bit.
So you've stumbled across the world of home brew or you got some new phone or tablet and are about to ask if we will port our software to your device of choice. Do not bother to ask here since the answer is going to be no.
First let me get a few rumors out of the way. ZDoom is not a huge unmaintainable mess. It is a fairly complex piece of software with a lot of specialized parts and, due to the age of the project, there is a lot of code that isn't a picture perfect example of good code. No doubt about that, but overall a single developer can understand how most of the code works. People also seem to still believe that ZDoom is locked to the x86 architecture. On the contrary, ZDoom itself has been known to run on PowerPC, MIPS, and ARM. Yes ZDoom contains x86 and x86-64 assembly code, but it is all entirely optional!
Now that I just got done explaining that it would be easy to get ZDoom running on any platform, why would we not want to expand our user base? For home brew systems, the answer is usually that FMOD is not available for that system. Because of this the entire sound system would need to be translated to something comparable. We have no interest in doing this ourselves since from our research there is no suitable replacement for FMOD that won't provide a worse experience for our current users. There has been some work contributed for optionally using OpenAL, but the developer of that branch has not made any progress recently.
But what about Android/iOS/Windows Phone/Windows RT where FMOD is available? In these cases the issue is mostly that we have no touch screen interface. All of these platforms do, to my knowledge, have a way to connect a keyboard, joystick, or mouse to them, but from a user experience stand point one should not have to assume any of these devices are available. Further more for the best experience the platform specific back end should be rewritten to be native to those platforms (this isn't nearly as much work as it sounds since ZDoom already has the interfaces laid out).
In many cases, Android being a notable exception, there is the walled garden problem. App store policies generally assume that the app is stand alone and does not rely on third party data (game IWADs). I know Apple does not allow execution of user source code, so the iOS app store is definitely a no go even if freedoom or whatever was packaged along with it. Since the platforms do not support side loading out of the box, ZDoom would be limited only to jail broken devices which vastly shrinks the user base. Small user base means low developer interest. (Note that this is ignoring possible license politics, and no being GPL would not alleviate any of that.)
Now how does Zandronum differ from ZDoom? Given the age of our ZDoom base at the time of writing, Zandronum is still locked to x86 architectures. The reason is mostly known so it wouldn't be hard to fix this, but our current stance is to just wait until the ZDoom base is upgraded. Also worth noting is that Zandronum's code quality is significantly lower than ZDoom's. (If you ever wondered why ZDoom doesn't pull Zandronum's bot code, this is the reason.) This has caused some issues with type sizes being assumed and stuff like that. Again, not a huge problem, but for this reason I would highly recommend anyone interested in doing a port to start with ZDoom first. You will have a much higher chance of initial success. ;) Otherwise the only other issue could be getting the OpenGL renderer working, but that's optional code.
One thing that is definitely NOT the reason the ports don't exist is any disadvantage given by the platforms control schemes. This is usually mentioned by more competitive players, but the fact there are a lot of casual players that just don't care about that problem. For example, ZDoom and Zandronum provide above average controller support for a computer game because there are people that want to use a game controller for one reason or another.
To conclude, don't bother asking here for ports to other platforms. If one of us becomes interested in a platform we'll just port it without being prompted. Instead find a community for your platform of choice and see if there's anyone there interested in doing the port. Perhaps this is a good reason to get into programming so you can do it yourself! Provided the code changes are done right there's no reason we wouldn't accept the port upstream, and if it isn't too hard to set up a development environment for it's possible we'd even maintain updated binaries once the port exists.