January 22, 2017 by Jeff
The title of this article is intentionally ambiguous, because it answers two questions:
These questions are related, of course, but I think it's possible and useful to separate them. The answers become a bit technical at times, so I warn and apologize in advance. I'll start with the first question, naturally.
It might strike you as odd that a lone developer such as myself would write a chat app. At the beginning a number of ideas were rolling around in my mind, but one specific inspiration still stands out. Last year I bought an iPhone 7 as soon as they were available. While I was setting up the new device, I needed to transfer some passwords from my Mac: email, Twitter, etc. My preferred method of transfer would be over USB via iTunes. In the past, iTunes was capable of syncing email account settings between your Mac and iOS device, but apparently that functionality has been removed.
Surveying the available options, I wasn't fully satisfied with any of them. I tried iCloud Keychain, but it's quite opaque and only syncs what it wants to sync, not what you want to sync. Moreover, it seems unnecessary to send my private information into the cloud just to transfer it between devices on my own Wi-Fi network. Another option is Universal Clipboard, a new feature in macOS Sierra. However, I didn't want to upgrade from El Capitan yet, so this option was immediately ruled out. Also, the list of Universal Clipboard requirements seems onerous to me: iCloud, Handoff, Wi-Fi, and Bluetooth. In particular, I had no desire to enable Bluetooth on all of my devices just for Universal Clipboard, since I don't use Bluetooth for anything else. The other option I considered besides iCloud Keychain and Universal Clipboard was a third-party password manager. I had used a popular one before, but they recently switched to the subscription model, which I don't endorse.
When software developers encounter a software problem without a good solution, they are usually tempted to develop their own solution. And of course I succumbed to this temptation! I hope you're starting to see why it's not so crazy for a lone developer to write a "chat" app. One of the goals was to chat with myself, which is … not crazy at all amirite? At least not if I'm talking to myself on multiple devices. That's crazy cool.
An app that securely transmits private information between your devices on your LAN is useful in itself. As soon as you have that technology in place, though, additional use cases suggest themselves. There's no fundamental reason why both devices have to be yours. If you can talk to your own device, why not talk to somebody else's device too? And thus chat was born. I started to wonder whether my app could be used in offices, schools, and other semi-public locations. I knew I couldn't compete with group chat apps such as Slack, but I thought there might be a need to keep yourself separate from the group. The idea wasn't necessarily to be the virtual equivalent of an office meeting, but rather to be the virtual equivalent of a water cooler chat, or gossip in the bathroom stalls (where you go after the water cooler). Although Slack may be ok for chatting with your coworker while including your boss, there are times you want to chat with your coworker while excluding your boss. Underpass attempts to fill that niche.
I could have stopped with LAN chat, but why stop there? At the networking level, there's not a lot of difference between LAN connections and internet connections. You can use TCP/IP regardless of the address range. So I expanded the idea to include internet chat as well. Admittedly, this expansion did bring the risk of added layers of complexity. Connection protocols are the same everywhere, but service discovery is a different matter. On a LAN it's easy to advertise a network service by name via Bonjour and resolve the IP address with DNS. There's DNS on the internet of course, but your Mac can't simply publish a DNS record on the internet. The internet DNS servers are not under your direct control, so you'd have to go through a DNS hosting service to publish a DNS record for your chat server. Fortunately, there are Dynamic DNS providers that allow you to give your computer at home an internet domain name and automatically update your DNS if your ISP changes your IP address. On the other hand, if you decide to skip DNS altogether, you have to know the IP address of your partner to have a chat over the internet. I felt that the risk of added complexity here was worth it, though, to open up literally the whole world for private chats. A chat app that only worked on a LAN would be too limited.
In answering the question of why I made Underpass, I've already gone partway toward answering the question of why you should use Underpass. Let me now fully answer that second question. The key feature of Underpass is decentralization. Underpass is peer-to-peer. It does not use a third-party service for chat. Why is this important? Because when you require a third party, you become absolutely dependent on the third party. A centralized chat service creates a single point of failure. If it goes down, it can take down millions of people with it. And let's be honest, every centralized service goes down. This has been demonstrated ad infinitum. If you're lucky, it's just a temporary outage. Eventually, though, most centralized services shut down permanently. Nothing lasts forever. Especially nothing free, and a lot of chat services are free. When the people in charge of the centralized service run out of money, or just decide that there's not enough profit, they will shut it down, leaving all of the users out in the cold. Another problem with centralized services is that they could be hijacked by hackers, malicious insiders, governments, et al. This may or may not be a remote possibility, but I think it would be unwise to assume that centralized services are invulnerable. They make an inviting target precisely because so many people rely on them.
Once you buy Underpass, nobody can shut it down. I don't have that power. Even if it were removed from sale in the App Store for some reason, that wouldn't remove it from your devices. Underpass will continue to work indefinitely, regardless of what I do. And since Underpass runs entirely on your device, with no third-party component, you don't have to worry about it getting hijacked by someone unauthorized. Underpass puts everything under your direct control. You're running your own private chat service on your own computer. I believe that Underpass is a product that only a small, independent developer could create for you. Large corporations and organizations will always favor centralized services. There's certainly an important place in the world for centralized services, and I wouldn't wish to abolish them, but there's also an important place for decentralized services. I think that both can exist side-by-side, indeed should exist side-by-side, and everyone should have both options, so I'm providing the decentralized alternative.