Thinking heads are not in the clouds

Part I - Can it run OpenOffice?

My first job in Germany was for this T-Labs project: an innovative online-first, browser-based operated system that promised to make it simple for enterprises to manage the devices for their mobile workforce. The OS was based on Linux and Firefox, users would have an SSO system and login directly to their office intranet through a VPN connection, software updates would be delivered transparently, any data that sat on the device would be encrypted.

We’ve built quite a lot of interesting components: custom Firefox profiles to substitute Linux login screens, specialized network managers that ensured that users always had the best connection and didn’t need to know anything about its setup, extensions to display widgets that would usually be provided by base desktop environment (e.g, clock, network status, mounted usb), etc.

The project was already over an year in development after it got an interested customer. After the demo, they all seemed interesting in one thing: could they run OpenOffice?. All of the “secure access to the intranet” was useful, but they already had re-trained their workforce when they moved from MS-Office to OpenOffice, they were not interested in doing that again.

When talking with their tech people, They pressed our management a bit: what happens if the user wants to upload a file, and they don’t have internet access? Oh, the file gets to the local filesystem and is later synchronized? Then why not do like Dropbox and have all documents in the local filesystem? Then you could also run OpenOffice!

Part II - KISS’ing my entire contact list (management)

In my quest to de-google my digital life, I was looking for an alternative to Google Contacts, specifically one that was easy to use with my de-googled Android phone. Being no stranger to self-hosting services, I started to look into what were the most commonly used alternatives and found that Nextcloud provided a CalDav/CardDav server. One few docker-compose commands later and I had it nicely running.

Something didn’t sit right with the idea, though. Nextcloud does a lot of things that can substitute Google services, but would I even use them? All I cared about was my contact list. I already have an email provider with its own calendar server, I don’t use Google Docs and most of my “work documents” are git repositories, which by its very nature are easy to synchronize between computers. Sure, I’ve also later found radicale, which seems to be focused only on being Cal/CardDav server, but did I really need a whole web application just to keep some files in sync between my different devices?

The answer is: of course servers are not needed, you can sync the files in a structured format and then you can have Android apps that work as a contact provider.

So now my phone has 99 problems, but at least contact management ain’t one.

Part III - Stream me not.

How does a stream-service-denier listens to music in 2021? This is what I would do for my music collection of ~10000 songs and ~175GB of high-quality mp3 and FLAC files in different ways:

  • When at home, I connect to the NFS mount on my NAS that have all the music files and I can play with my local media player.

  • My laptop has a large-ish SSD, so I can have a music folder managed with Syncthing and all the songs are also there for me to listen.

  • For my phone, I’d upload my music to Google so that I could choose what to download to my phone and keep it there… and then I wake up in a jolt realizing that Google killed once-again a service that was useful.

Oh, well… I wanted to de-google anyway. So let’s look at alternatives:

  • Subsonic - “Your complete, personal media server”
  • Ampache - Music Streaming server
  • Jellyfin - enables you to collect, manage, and stream your media.
  • Funkwhale - A social platform to enjoy and share music

Noticing a pattern?

I ended up installing Jellyfin and Funkwhale. Funkwhale claimed support for Subsonic API anyway and Jellyfin also had some android clients. As long as these clients had offline support and worked similarly to Google Music, I would be satisfied again.

Did it work? Unfortunately, no. I’ve tried three different Subsonic players for Android which claimed offline playing ability, also the jellyfin client. None of them were able to save the downloaded songs to external storage, even with all relevant permissions granted. They only worked with internal storage, and (worst of all) it only worked when using their own player. Songs that were downloaded by any one client were not available to an external media player.

So, we have four different projects all working on really nice web applications. All I wanted to ask though: can I run OpenOffice Metro?.

Everything is (still) a file.

The problem with all experiences above is that it started with the premise that what we needed was to have everything on the cloud just like the Google Music App. Thing is, Google’s app worked this way because that favored their business model - until it didn’t and could be so swiftly killed by Big G - not because it was what the users needed.

What we need is to have a device-transparent way to see our data. We got so used to the idea that web applications let us work from “dumb terminals” that we failed to realize that there is no such thing as a dumb terminal anymore. With multi-core smartphones, many of them with 4, 8, 12, 16GB of RAM, it’s not too hard to notice that bottlenecks of mobile devices are battery life and (intermittent and still relatively expensive) network connectivity.

One of the early jokes about web2.0 was that to have a successful company was to take an Unix utility and turn it into a web app. This generation of open source developers are reacting by looking at successful companies and building “self-hosted” versions of these web apps. What they didn’t seem to realize is that we don’t need them. The utlities and the applications still work just fine, we just need to manage the data and how to sync between our mobile/edge devices and our main data storage.

If you are an open source developer and you are thinking of creating a web app, do yourself a favor and ask yourself: do I need to create yet-another silo or can I solve this with Syncthing?