Linux
Jan 15, 2015
What flavor of desktop Linux should I use for the initial port of Thimbleweed Park? I realize this is like asking what religion is the right one, and in some ways it might even be a thornier and more contentious issue, but I am fearless in the face of controversy. I ask the questions everyone else is afraid to ask.
I use CMake to generate the Xcode and VS projects, so what IDE should I use on Linux? Or just have CMake build make files on Linux? I tend to spend 99% of my time on the Mac in Xcode, switching to Windows just to do a build or for compatibility issues. Windows and Linux won't be platforms I do a lot of core work on.
I'm currently using SDL for window creation and input and I don't see any reason to switch. It runs on Linux and works pretty well on the Mac and Windows. I don't use any of SDL's rendering, I only use it to create the windows and then get a context back and do everything in OpenGL/DX from that point on.
OK, that's a lie. I do use their font lib because I don't want to write font rendering code. Every OS seems to do it different, and it's nice to have it consistent across devices.
I'm no stranger to Linux as I run Ubuntu on all my servers, but those are all headless machines I SSH into and I've only dabbled in the desk top a few times.
I'l probably run it as VM on my Mac using Parallels, at last for a while, then I'll get a dedicated machine.
I figure it might be better to get the core of my engine running on Linux early on.
- Ron
Just target the SteamOS SDK, it is the only stable thing you will find in Linux land.
I would use Ubuntu and probably the LTS(14.04) version, the others are quite buggy nowadays, because Canonical is focusing on their phone stuff and don't care for the non-LTS versions desktop that much anymore and they are only supported for 9 months not 5 years like the long term support versions.
Most game that do have problems, have problems with audio. That is a mess on linux that slowly gets sorted out. Most current distributions use pulseaudio, but you probably want to target alsa, as pulseaudio has an alsa compatibility layer.
Linux tends to have trouble adjusting to the correct Monitor resolution. It's probably best not to switch to your game resolution, but instead scale to the desktop resolution to avoid trouble.
As to which Linux to target...I would focus on the Steam runtime environment, maybe the latest Ubuntu LTS, any more than that is probably going to stretch you thin (also considering the varying degrees of performance and annoyance you'll get out of Intel/Nvidia/AMD based graphics)
As far as distro to use, for a cross platform project I work on we try to find the oldest version of Linux that supports what we need then statically link against libstdc++ and glibc (use -static-libstdc++ -static-libgcc with GCC). This gets more tricky if you have lots of libraries you depend on (you could recompile those projects to add these flags, though). I would probably select a LTS version of Ubuntu as mentioned, though SteamOS seems an intriguing choice.
I know Parallels for Mac had built in support for Ubuntu (it was presented as an option when creating virtual machines), but I haven't used it personally.
I've worked with non-Qt CMake-based applications in QtCreator for several years, and I haven't found anything better on Linux. Currently I'm giving VS in Windows a go, and I miss the snappyness and the precise code-completion engine of QtCreator.
If you'll distribute it via Steam, it is packaged but not officially supported on various other distributions.
Either way, I don't quite see the need to pick a specific distribution. As long as it doesn't require any bleeding-edge or totally outdated libraries, everything should be fine. The best solution would of course be to release some code under a free software license so it can be adapted to future changes (like Marcelo Ellmann already suggested). I don't know if you're willing to do that, but releasing the code of the VM/interpreter that will then run your scripting language would be great! Otherwise people will eventually have to reverse engineer it just like SCUMM/ScummVM. :-)
As for the IDE: I use Netbeans, but I would say that's mainly a matter of preference. I like your suggestion of using CMake to build makefiles.
Last 6 months
1 Mint 2377>
2 Ubuntu 1854>
3 Debian 1589<
4 openSUSE 1403>
5 Fedora 1314=
6 Mageia 1128<
7 CentOS 1126<
8 Arch 1048=
9 elementary 939<
10 Zorin
Source:
http://distrowatch.com/dwres.php?resource=popularity
Breakdown per platform for Mac and Linux
Linux Android 28,394 M 14.06%
Mac Intel 10,656 M 5.28%
Linux Other 1,507 M 0.75%
Linux Ubuntu 920 M 0.46%
Mac PowerPC 47.1 M 0.02%
Linux SUSE 8.2 M 0.00%
Linux Mint 6.9 M 0.00%
Linux Fedora 6.8 M 0.00%
Linux Red Hat 5.1 M 0.00%
Linux Debian 4 M 0.00%
Linux Mandriva 3.4 M 0.00%
Linux Mips 3.3 M 0.00%
Linux Gentoo 2.2 M 0.00%
Linux Arch 1 M 0.00%
Linux CentOS 963 k 0.00%
Linux Epiphany 725 k 0.00%
Linux Kubuntu 217 k 0.00%
Linux PCLinuxOS 102 k 0.00%
Linux Slackware 44 k 0.00%
Linux Motor 31 k 0.00%
Linux Oracle 31 k 0.00%
Linux openSUSE 31 k 0.00%
Linux Xubuntu 31 k 0.00%
Source: https://stats.wikimedia.org/wikimedia/squids/SquidReportOperatingSystems.htm
Seeing that valve release it's client to Ubuntu and has it's steamOS also out based on debian, this seems like obvious choices for better support for gaming in Linux.
General advice: There aren't that many commercial desktop Linux apps; long-term I'd try to support whatever they're supporting.
Examples:
- Steam client: deb packages. They only mention Ubuntu by name.
- Google Chrome: Debian/Ubuntu/Fedora/openSUSE (which I think translates into deb + rpm packages)
- LibreOffice / OpenOffice: deb + rpm packages
My answer would be to go with Ubuntu or Mint. As you can see in distrowatch, they are the most popular ones. Fedora is more enterprise oriented than the Debian based. My impression is, if anyone who is a "casual computer enthusiast", who would give Linux in general a try, he/she will be recommended to try Ubuntu/Mint. Fedora is more enterprise stuff in my opinion.
Which IDE:
I think Qt Creator is great and comes the closest to VS (many people say it supersedes it). It can handle CMake files very easily. And if you get used to it, you open up the opportunity to also use this on Windows, because it is inherently multi-platform (I do not dare to suggest replacing XCode, because you seem to be quite fond of it ;-)
One request:
One honest request (please, please): whichever distro you choose, please use the libraries that come with the distro. This is the single biggest advantage of Linux altogether: from the version of the distro (e.g. Ubuntu 12.04 or 14.04), you know which version of the libs are being maintained (e.g. libsdl2.0.2). Please don't dump a on us, which is supposedly self-contained. Make a .deb, which has dependencies to the packages in the distro and e.g. in Ubuntu we can go:
dpkg -i thimbleweed1.0.deb
apt-get install -f
dpkg -i thimbleweed1.0.deb
sorry for not getting your point. If for example you'd link boost and you want to support Ubuntu 14.04 you can make your .deb depend on version 1.54 or 1.55 as both are supported. You will depend on the specific version, so even if a newer version is introduced, the old one will not go away. In Linux it is not a problem to have many versions of one lib in parallel (it is called .dll hell and not .so hell ;-)
apt-get install qtcreator
Just jocking
Of course, XCode is way sexier - especially if you have build bots set up.
I know is not a smart decision for a commercial software in Linux but when you release the game and I will be forced to install 2451 libraries I can say that I asked for Slackware and you ignore me.
Choose anyone, I am already used to suffer.
with the last version on a linux machine and "cmake". A simple script to update then compile could help wasting time (not so much btw)).
Just develop on your prefered machine/OS/IDE. In my exp. compatibility problems between mac and linux are way fewer
than mac / win.
Test the build on Ubuntu (should be enough for Mint, and quite compatible with Debian), Fedora (enough for CentOS) both using
proprietary drivers than pre-installed pain-in-the-ass-to-disinstall-for-the-average-gamer-yet-low-performance open source drivers like nouveau for Nvidia cards.
I don't believe SteamOS is very used, and still beta.
I guess the LTS could be less buggy, but in my experience they're about the same.
Ubuntu by default uses the Unity desktop environment, which some people really dislike (not me, I like it). Mint uses a different desktop environment, Cinnamon, which is pretty popular nowadays. (Both can use others as well...) That's the big difference, the default Mint is a derivative of Ubuntu, just like Ubuntu is a derivative of Debian.
As for an IDE, I personally use JetBrains products myself (IntelliJ Idea, PyCharm) for my work and recommend them. They have a C/C++ IDE as well, https://www.jetbrains.com/clion/, but I see it's still in early access (beta I guess) and it's not free, and I've not used it so no direct experience. I'm not a stranger to the traditional editors - I maintain and use my own Vim package manager - but honestly I'm not sure I'd recommend Vim or Emacs nowadays if you can use a great IDE out of the box, like JetBrains offers.
I'd actually be interested in what you end up going with, tool-wise. I'm a contributor of Ubuntu Make (https://github.com/ubuntu/ubuntu-make), which is a project to make setting up a development environment on Ubuntu easier. It'd be interesting to get a real game developer's perspective and maybe make the experience better in the future.
Good luck with making the game, and thanks for supporting Linux!
-A Backer
Some really good things can be hard to find. Couple of weeks ago I found RTags - a C/C++ indexer package/plugin using clang - when someone commented it on some forum... so yeah. But it's great and now I have true intellisense completion and intelligent code browsing, instead of regex parser/indexer. I also have instant error checking with combination of RTags and Flycheck and much more.
At least FSF people don't want to promote any clang-stuff so that is one reason for hard to find things. I hope FSF gets GCC Abstract Symbol Tree politics sorted out so we can have intelligent code indexing with GCC too. I don't use refactoring but that's should be possible with clang too.
Sometimes I try to switch to "modern" IDE. I've tried QtCreator, KDevelop, NetBeans, Code::Blocks, Eclipse but always get frustrated when I can't change the mechanics of the IDE myself, which I can do easily in Emacs with Elisp. I've written little Elisp programs for Emacs that allow me to compile, run visual debugger, run Valgrind memory checks, run tests, run profiler etc. The only IDE I've used and liked was Visual Studio in school, but I don't have Windows and I have all the things I liked in Visual Studio now in my Emacs.
So, sorry for the long post. I don't think I would recommend Emacs or Vim as the only option for anyone - you get everything done happily with KDevelop or QtCreator or something else I'm sure. I just want to say that Vim and Emacs are really powerful tools and if someone is interested using those she/he shouldn't think these programs can't do things that "modern" IDEs can because there's lots of things these editors/environments are capable of.
I work on Linux graphics drivers, and I use Arch.
I recommend Arch. I've been using it for almost 4 years, after about 8 years on Gentoo. I think rolling distros make life so much easier, and the Arch devs do a really great job of keeping all the important packages up to date. It didn't get totally rick-rolled by the insane systemd debate. The LiveUSB ISO is easily the best of the modern era. Pacman is the least disgusting of all the package managers I'm familiar with. There is a great community of people who publish "out of tree" packages to the AUR.
Do it. And if you find GL bugs on Intel hardware, send them to me :P
As for the DE, it is a matter of taste. I don't like the default configuration of any of the DEs out there. Fortunately, KDE offers sufficient flexibility and configuration options to tweak thing the way I want. Most consider this not very significant, but organizing the layout of the applications to minimize my hand (mouse) movement and click count optimizes my productivity a lot.
For development... Eclipse has intellisense and syntax highlighting for pretty much all languages. You can hook up external builders like cmake, scons, autohell, waf, etc. to it with minimal effort. That said, emacs is my primary choice for development. With sufficient dedication and stubbornness, you can do _anything_ in emacs. Some say it can even make you coffee but I haven't tried that yet. But wait... You said you don't like LUA. What can we do to convert you?
SteamOS probably isn't worth targeting, but building against the Steam Runtime would probably be worthwhile (that's the collection of libraries that ship with Steam that Steam includes in the LD_LIBRARY_PATH when launching games). Most of the time when I ship stuff, I build on the current stable Debian or on my current desktop (usually the latest or next to latest Fedora release), but I make sure to get people on as many distros as I can to test and help me identify any packaging/dependency issues.
Talking of distros, I'd say Ubuntu and Fedora. Linux Mint is managed with Ubuntu. We Arch and Gentoo users will figure out how to run it ourselves.
If it runs in Ubuntu (or Debian) it is MOST likely to either run out of the box on the others or at least the cummunity of those more obscure distros will manage to get it to run. As this will be an ace game of course, they will try very hard, too.
That being said: you will attract lots of modern geeks (and me) if you offer binaries for linux/ARM as well ;-)
Choosing your Linux is *far* more important than your religion. ;-)
GOG supports "Ubuntu and Mint, in their current and future LTS editions" [1], while Steam seems to support "Ubuntu 12.04 LTS or 12.10 with the Unity, Gnome, or KDE desktop" [2].
[1] http://www.gog.com/news/gogcom_now_supports_linux
[2] https://support.steampowered.com/kb_article.php?ref=1504-QHXN-8366&l=English
I don't know which Language you use to develop TP but if it's C++ you might want to check out the QT creator (even if you don't use the QT toolkit). It integrates with CMake which should smooth things over for you. Kdevelop works well for C++ as well. (take it with a grain of salt, I am not really a big C++ person)
Therefore: Debian -> Ubuntu is my suggestion.
http://ubuntuforums.org/showthread.php?t=2224686
It would seem like they are. Maybe I'm missing something and there are layers of depth that separate Debian from Ubuntu from Mint. Obviously you'll need to test the game on everything (that's what betas are for), but is it safe to assume that once a piece of software is compatible with Debian it would be compatible with Mint too?
I'm not asking this question to Ron, but to any of the other peeps who know a thing or two about Linux and Distro-forking.
If this is not possible, a second best (but much worse) solution is to ship your own libraries.
BTW I use Gentoo, so I have no love for any Ubuntu version that you can use for a few years then becomes unsupported because of new lib versions.
that sounds a lot like "I set up a machine of distro X and then build Thimbleweed Park there, so that will decide my port". If that is the case, I suggest you set up a private instance of the Open Build Service (OBS). Although it was originally an openSUSE project, you can build packages for a lot of distributions with it, not just openSUSE and not just RPM-based distros. Also, it neatly handles different architectures (think i686 vs. x86_64 vs. arm7l). Setting it up might require a day or so, but it pays off. All you need is the build recipe (e.g., a spec file) for the package manager.
HTH
Eric
I would recommend Ubuntu, if you haven't used Linux all that much. If you need someone to, I can build it and port it for you. I would work for a copy and nothing else.
~DuphusDigital
- Ubuntu is very common, but I dislike Canonical very much. They always try to do things differently than other distributions (Wayland vs. Mir, Unity, giving little back to the projects)
- Linux Mint could be an alternative.
- SteamOS is targeted for gaming, but still has a low userbase and is only developed by Valve so things can change quickly and don't have to be compatible.
- Debian is the base for SteamOS, but has a slow development cycle.
- My usual choice is openSUSE. If you need professional support you can get it (community is big enough, or by paying for Enterprise Desktop). It quickly adopts new standards and ideas, while still being stable and gives back to the kernel, etc. Finally it shipes my favourite desktop enviroment by default (KDE)
IDE: As enough people pointed out: Qt Creator is stable, feature-rich, cross-platform, supports CMake and is backed by a huge community where cross-platform development (even iOS, Android etc) is deemed essential.
openSUSE on the other hand has build up an entire build service (https://en.opensuse.org/openSUSE:Build_Service) including Ubuntu, Debian, Redhat, even on PowerPC if that's important. And even 24/7 priority support is still affordable.
http://chakraos.org/
For development QTCreator is great. We use it on Ubuntu 12.04 LTS in combination with CMake (and our own sauce).
I won't be able to use it in the final game due to licensing issues, plus it's lacking accented characters. It's nice because it's a C64 font, but it's proportionally spaced.
If we look at Distrowatch.com (which is not represantive though) we see the most HPD points on these distributions:
(last 12 months)
1. Mint (2858 points)
2. Ubuntu (2011 points)
3. Debian (1665 points)
12. Lubuntu (752 points)
20. Xubuntu (556 points)
30. SteamOS (431 points)
32. Kubuntu (399 points)
33. Ubuntu GNOME (388 points)
35. KNOPPIX (364 points)
a total of 9424 H.P.D. points on distrowatch.com, which is like really a lot.
For the free drivers e.g. (Intel HD 4000 and Intel HD 4400) support for OpenGL 3.3 (glxinfo showing "OpenGL core profile: 3.3" is not yet in all pre-installed versions of Mesa.) But going for OpenGL 2.1, OpenGLES 2.x and also OpenGL 3.0 there should be no problems with really *most* drivers.
The *more important* part was to compile in 32 Bit and 64 Bit as well as both on Little and Big Endian. This found a LOT of otherwise rather hidden bugs and cross-plattform incompatibilities.
I fully support the comments above about releasing the game engine source and keeping the commercial rights for the game content (similar to what has been done to id's Doom 2). It's impossible from keeping geeks circumventing your copy protection, so why not just USE the great geekness potential out there to port the game engine to every plattform available.
[1] It's called BlinkenSisters. I'm not the maintainer anymore and haven't played the game in a long time. My priorities shifted. It might still be available online, just Google for it.
I use Ogre3d (and SDL in the past) and I have a macbook. So you can figure out that I had to use Cmake and others.
After all I decided to install windows onto my macbook in bootcamp.. VM was not working so good. Mouse integration did not work as well as I expected.
Cheers!
Compile statically to get the SDL of your choice into final binary. Don't know if there is anything extra needed to support Steam, may be worth checking out.
The only really important part is the one you're getting right, right now: develop/test for the platform from the start, doing that it's usually not a problem, it's porting afterwards that may be tough.
How do you connect to your network though? WiFi can be a bit of a pain in the rear, so Ubuntu GNOME might be best.
As shitty as it sounds the best idea is try 'em and see which one fits you best! It's a tough call... What matters to you?
As the Steam implementation guy at Manjaro Linux, I have one request though: keep a machine with a partition running a bleeding edge distro (Arch - THE rolling distro, Manjaro unstable - easily deployable Arch w/ good driver and detection support, or Gentoo - the 'you compile everything' distro). That is where any bugs or version issues will pop up first, and they WILL eventually spread, so you can nick 'em at the source.