Craig suggested a snarky Modest Proposal, start targeting Linux instead of Mac, if you recoil at Apple taking 30%.
It's really 15% for most people in Small Business Program. In the Olden Times Before Ye Appe Store, distributors only would take 50% or more cut, publishers would take 70-90% cut; the App Store was a ridiculously good deal when it came out. Assholes like Tim Sweeney at "Epic Games" are of course appalled at paying out a dime, and so after an epic court battle where they lost 9/10 claims, have now reduced it to 27%, and owe Apple $73M for legal fees.
But let's think about switching. I've been spending a few days arguing with Linux zealots on fediverse, and have come to some conclusions, aside from the obvious that Linux people are crazy.
THE GOALS
- Write software in tools and languages I don't hate.
- Keep the kind of software quality, taste, accessibility, etc. that I like.
- Ship it and GET PAID.
Not Goals
- End-user use. I don't have to inflict this on myself, just see what the dev environment's like.
- Server software, I have FreeBSD for that.
- Joining a cult and singing the Free Software Song - do not click, it's Stallman singing.
GUI APIs
This is the most visible, but shallowest problem. Craig suggests Gtk+ or QT.
- Gtk:
- Pro: It is easy to code against in C, and from there you can use anything you like with FFI; I could ship my Scheme programs with Gtk.
- Con: Looks like ass everywhere, native to nothing.
- Every version is incompatible and utterly different from the last.
- Theming makes UI design very hard, or impossible.
- QT:
- Pro: Actually not terrible looking, sometimes almost passes for native.
- Con: Have to work in C++, which is a HARD NO from me.
- Gnome: Mostly this is just Gtk.
- Con: Do everything in their awful IDE.
- Sort of has design guidelines, but the child-like or Windows Vista-like icons, bubble aesthetic, is not appealing.
- Requires Flatpak, which I'll get to in a minute.
- KDE: Mostly this is just QT.
- Pro: Can be worked in from Kate, which is an OK editor. Here's Mark, saying something almost positive about a Linux program! Kate is OK. It's no Vim, though.
- Human Interface Guidelines are pretty consistent, professional-looking.
- Con: Can also be worked in from KDevelop, which makes Eclipse look fun (Eclipse is not fun).
- UI is mostly written in QML, which is YAML like Microsoft's XML layout stuff. Just horrible.
- Mostly the loser in the Linux User Interface Wars.
- Again, C++, no.
- Android:
- Pro: Is a platform with some aesthetics & user experience; not great, but it exists.
- Has a paid store.
- Con: Languages are Java or Kotlin, which are very silly.
- IDEs for it are really spectacularly awful, either Eclipse or a bag-on-the-side mode of IntelliJ.
- Security is F-tier, I don't like contributing to a platform that's all scams, piracy, and botnets.
I hate basically everything here, and more besides. Gtk has a bare winning edge that it's easier to use from a language I like.
System APIs
The deeper problem of Linux is everything in between 1970s terminal programs and trivial GUI programs that don't interact with anything. There's no real system integrations.
If you want to use the user's calendar, you have to research several calendaring systems, some of which may have an API and some don't. Again when you want to do messaging, oh, wait, that doesn't even exist on every system. Again when you want to do something with curated photo albums, not just shoving a png in some random directory.
Or dig deeper, and audio is the same fiasco that chased me off Linux desktop 20 years ago; you simply can't get multiple audio streams to sync & play, and the latency is often in the seconds for audio processing, I can get far under 10ms on Mac. Video is nonexistent other than calling out to VLC or mplayer; you don't want to try.
What you can get done on Linux is maybe a database and low-level networking. If that's not enough, you're in for a rough ride.
Taste
So I use this word a lot. "The only problem with Microsoft is, they just have no taste." —Steve Jobs - watch that whole clip from Triumph of the Nerds.
Taste is about picking one aesthetic, one set of user experiences, and saying no to all the others. You have to choose. And most people can't choose, or they just end up dumpster-diving a bunch of junk that doesn't go together, and can't understand why they're unhappy (or maybe they're Grouches who like garbage).
If the platform creator has an aesthetic, it has behavior guidelines, you follow it, so users will feel comfortable, they won't feel surprised: Law of Least Astonishment.
This is impossible on Linux. Gnome users hate KDE, KDE users hate Gnome. Some of them like Electron shit, others think it's as bad as Flash (it's actually worse). Until one of them becomes a One True Catholic Linux and puts the rest to conversion or death at swordpoint, there won't be any unified UI.
So now you have to do QA testing on design as well as functionality on multiple distros, many different configurations, and you'll probably need testers familiar with those setups. It's an impossible QA task.
Suppose I want a file open box with custom file previews. On Mac OS X, I can use NSOpenPanel
, customize the accessory view, watch notifications and update the preview. Gnome & KDE will deal with even having icons differently, and you can't override anything without bringing in their code and hacking on it.
Ship It
You have several choices here.
Gnome people say Flatpak, which bundles all the libraries and support for a program into a bundle, explicitly copied from NeXTstep/Mac OS X/iOS .app bundles (the word "app" is only valid for these platforms! This is where it comes from!)
Which is theoretically fine, but runs into the problem that Linux doesn't have a consistent OS base, so Flatpaks are a LOT bigger than Mac app bundles. They run "cross-distro" by some kind of linking hackery and translation layers, so your Gnome program includes all of Gnome, and looks like ass on KDE, but runs. As noted under Taste, that's not an acceptable way to ship, you'd have to test on everything.
npm, deb, & nix are distro-specific bundles, but at least they can check dependencies and install only what's needed. They don't help you at all with translation layers. While there's a UI for these, you really only do them from command line.
"Free Software" is an incredible pain in the ass here, you have to carefully check what libraries you use, and if they're LGPL or BSD/MIT, so you can use them with some qualifications, or GPL or AGPL, in which case you can't (unless you like shipping all your source and having 100% piracy).
Get Paid
Releasing free software is useless. As Harlan Ellison said, cross my palm with silver.
Universally, every Linux I've spoken to hates paying for software, they would never do it, think I'm an immoral monster for suggesting it, I should be happy someone might put a penny in a tip jar.
This is a backwards, shit-covered, medieval religious dogma. It's appalling in the 21st Century that Rape Apologist Richard Stallman is still Pope of the FSF, eater of toejam, owner of abortion jokes in fortune
. And his devotees are carrying out The Faith, regardless of the sins of their leader.
There's no good software stores. Elementary has one, which is defunct or close to it, from what I can tell. Ubuntu shut theirs down years ago.
Google Play for Android isn't on every device, and it's widely pirated. I also morally object to letting Google have money, but any port in a storm if it wasn't for that?
itch.io works fine for games. I suspect the Linux paid users are the tiniest most shrivelled-up sliver of the demographics. 20-30 years ago, I actually had minor success with shareware on Linux, but that dropped off and never recovered.
Otherwise, I dunno, try to run my own e-commerce site and sell binaries which will instantly get pirated because nobody on Linux has any money?
So instead of paying Apple 15-30%, pay whatever hosting, bandwidth, & e-commerce costs you, and you get nothin' in return. Let's see, 30% of nothin' is…
Conclusion
It appears that eating babies will not actually solve the overpopulation or hunger problems at this time, Mr Swift (no relation).