White walled garden

While I was developing the SlothTracker - a time tracking software for Windows, Mac and Linux, at some point during the development I had to test it on all platforms. To make testing easier, I’ve decided to install all of them on the same computer via a virtual machine. Things went smoothly until I came to MacOs.

According to the Apple’s policy you are not allowed to install a MacOs on a non Apple’s hardware. So how do I test my software if I am not a Mac owner?

I can either:

  1. Buy a Mac (where the cheapest one at the moment costs over 1000$)
  2. Borrow a Mac from someone
  3. Install a Hackintosh on a virtual machine and break the Apple’s policy

If you are building a product that brings reasonable amount of income from the Mac users, then buying a Mac is a no brainer. If that’s not the case then dumping a few hundred bucks just because is hardly justifiable.

Your second option is to borrow the Mac from someone you know. Considering how small the Macbook hard drives are, the owner will not be happy with your decision of installing the entire development environment on their machine and possibly leaving gigabytes of installed stuff behind. You would also have to work around the owner’s schedule, which could be quite annoying. What do you mean with “your daughter needs to write a school paper this evening?”

And finally you can forget about the law and install a MacOs on a virtual machine. A quick search revealed hundreds of tutorials and blog posts about MacOs installation. All of them were installing some shady ISO images from some dude’s Google Drive and acting like they have just discovered a fire.

Obviously I went with the third option, as it seemed the best out of all the possible poor choices. After spending a few days noodling around with the “illegal” Mac ISO and not being able to get past the boot screen, it was time to reflect on what was going on [1].

Writing a cross-platform desktop application is a much harder task in comparison to writing a web application, as the tooling is just not as polished (see also Sad state of cross platform gui frameworks). This kind of explains why the web applications are everywhere and desktop software is slowly going away.

On top of the problems that the application development brings, there are also numerous things to do that are platform specific, despite the fact that the frameworks are cross platform:

  • Create a workarounds for all the platform specific bugs that are part of your chosen GUI framework. The framework might be working fine on one platform and behaving extremely weird on another. Your users won’t really care though and will demand the perfect experience everywhere.

  • Set up a build machine/environment for every platform which you are supporting. Cross compiling desktop applications is still not an option in this day and age.

  • Create an installer for every operating system out there and figure out the installation specifics for every platform.

  • Discover that some platforms yell at your users when they are trying to install a software that does not have a signed installer. You soon realize that signing an installer on every platform out there is not cheap and a hassle that doesn’t bring you anything. On Windows you also have the pleasure to deal with the shady certificate resellers. Check one of them and their websites. Is it a scam and they will steal my credit card info or is that just their way of doing business? I don’t know. I felt dirty after visiting them. You could use online stores that supposedly take care of those issues, but do you really want to? You give all your power to some corporation which can one day simply decide that your app is no longer in line with their policy, and remove it from their store whenever they want to. You also have to go through their convoluted process of checking your software for “malware”, which could in some cases take weeks and be rejected for no good reason. There are plenty of horror stories about that floating on the internet, take your time to scroll through them before you have decided to go this route.

As you can see developing a desktop application is not just about programming the UI. The rest of the mountain is just dealing with the issues that really shouldn’t be there. And if testing the software on a certain platform is too much hassle, then that platform will just not be supported. This seems to be the case recently, as I can’t even recall the last time I saw a cross platform application [2]. They are either bound to one platform or web based.

In the end everybody loses:

  • The users are missing their favorite software which only exists on a certain platform.

  • The developers are losing sales that another platform might bring.

  • The online stores are losing the percentage of their revenue as I simply have no interest in dealing with their convoluted processes. They should make your life simpler, instead they are just adding another layer of bureaucracy.

Microsoft is getting a lot of shit about their latest Windows 10. It has its own set of issues like their intrusive telemetry and a bunch of random crapware installed by default that nobody asked for, but at least they are playing along with the developers. You can install it however you like - bare metal or on a virtual machine and it still works on 10 years old computer.

Apple on the other hand is building bigger and bigger walls around their platform. Their latest lunacy is preventing users from running the application that was not notarized. Which pretty much means “if we don’t bless it, you won’t mess with it”. It’s like a mob that will thrash your place if you don’t pay for the insurance.

Mac warning dialog about damaged software that should be moved to trash

Of course there is nothing wrong with the application mentioned above. The problem lies within Mac’s software called Gatekeeper which prevents running the software that does not have a signed installer. You can disable the Gatekeeper from doing that, but the solution is not really straightforward [3].

Bigger applications such as VSCode are also not immune to this issue. See this VSCode MacOS notarization issue for more info. In order to prevent the link rot problem, I have also embedded the comment below:

VsCode installation warning on MacOS

I was able to install Visual Studio Code on Catalina using the following steps:

  • Double-click the installer to get, “Visual Studio Code” can’t be opened because Apple cannot check it for malicious software. message

  • Open Security & Privacy settings page to see the Open Anyway button

  • One more window and one should be inside VS Code

The users that paid twice the amount that a PC would cost, now also have to fight the ecosystem that prevents them from actually using their computer. Who knew that installing a text editor is such a dangerous thing to do? Let’s not forget that is coming from a company that claims how using their products will help you “unleash creativity” and a bunch of other corporate mumbo jumbo.

So here is the thing Apple and Apple fans. If you want to have programs on your beloved platform, you will have to make your platform developer friendly. Developers are the ones that are writing your programs and publishing them through your stores. If they are not able to use their preferred platform while doing that (which surprise surprise may not be Mac), it means they simply won’t publish their software for your platform.

You can have your white walled garden if you want. You can keep collecting the entrance fee to get inside if there are enough people willing to pay for it. You can keep telling everyone and their mother how great your garden is.

The thing is, I don’t like your garden. I don’t like your whackadoodle way of doing things and telling people they are using your products in a wrong way [4]. I don’t like how you don’t play along with the rest of the world [5]. There are more open minded gardens out there, where you are in charge of running your corner however you like. A garden where tearing down a wall to make more space for your stuff is possible and not frowned upon.

Don’t turn away the ones that makes your garden worth visiting.


[1] There is a way to install a MacOS on a virtual machine running on Linux, but your machine has to be recent enough (it’s time to replace the 10+ years old machines). See https://github.com/foxlet/macOS-Simple-KVM for more info on Hackintosh installation. Unfortunately there is not much useful content on this topic and if something is not working, you are pretty much on your own.

Keep in mind you are still breaking the Apple’s policy by doing that. For a company with a decent product where a head count is greater than one, it’s probably better to just bite the sour apple and buy a Mac. It’s expensive, but it will save you a lot of time that would be otherwise spent on tinkering with the environment.

[2] Yeah, yeah there is Gimp and Inkscape, but can you name one non-trivial cross platform application that came out less than 5 years ago? I don’t think I have heard about it.

[3] A quick rundown on how to disable the Gatekeeper from preventing installation of third party apps:

  1. Open terminal and type:

     sudo spctl --master-disable
  2. Go to “Security & Privacy” dialog and under “Allow apps downloaded from” section select “Anywhere” radio button.

[4] Coming from Steve Jobs on iPhone 4 antenna signal issue:

Non issue. Just avoid holding it in that way.

[5] Here is the thing that still bothers me after all these years. Almost 10 years ago I received an iPod Nano 5th Gen as a gift (the one with the big screen and the first iPod that had a camera). It’s simply the best Mp4 player ever produced and I am still using it (this observation comes from talking with other people that owned it as well).

In the early years I was using Windows and iTunes to transfer music to the iPod. This worked fine except for iTunes being slightly slow at times. After a few years I switched to Linux and guess what, iTunes for Linux does not exist. I was still able to transfer the music across via some plugins for whatever music player I was using at the time. Those plugins did not really work that well, and half of the iPod’s functionality just went away overnight.

I couldn’t create a playlist and since I had no playlists on it, I couldn’t use it as an alarm system anymore. The usual response from Apple fans was: “Why are you using it for an alarm system? Don’t you have a phone for that?” No, I don’t and that’s not the point. The iPod had this functionality before and now it does not.

If they made it acting as a dumb hard drive where you could simply copy files over and play it right away all of those problems would be gone. If I remember correctly that’s how most of the Mp4 players of other companies worked at the time.

But Apple being Apple, they had their own vision of doing things. You can either use their entire platform where things kind of work right out of the box or you can forget about using their products. Perfect for consumers but awful waste of time for the tinkerers. Mixing their products with another platform just doesn’t work and in the end it is you who will be burned in that battle.

And that was the tipping point when I had decided to not touch any of their products ever again.