Hacker News new | ask | show | jobs
by tazjin 2501 days ago
There's another clear distinction: Telegram has proper native clients and an open protocol.
2 comments

As someone who’s worked on Telegram clients for years, I can assure you that the protocol isn’t open. It’s quite opaque, and the FOSS thing is mostly a facade.
I mean the protocol is documented enough to create an implementation of it from scratch - that meets the metric of open.

I suspect there is enough implementation there to write a server implementation too, at least a simple one.

I mean the protocol is documented enough to create an implementation of it from scratch

It's not. If you want to write your own, you have to reverse engineer most of the protocol. The clients aren't fully open source, and when they are, the public code usually lags behind the actual binaries that are released, often by months. It's nearly impossible to write a client that keeps up with the features in Telegram.

You may be thinking of the bot API documentation, which is documented. Many bots don't use that, though, as it's very limiting.

I suspect there is enough implementation there to write a server implementation too, at least a simple one.

The servers behave in very strange, unexpected ways, and the official clients expect these quirks. Most of the third-party clients either use TDLib, which is official and not fully open source, or have also grown to expect these quirks.

Just as a quick example, pretty much everything in Telegram has a numeric ID. Clients, bots, etc. have come to expect that IDs within certain ranges represent certain objects--users have a range, private chats have a range, channels have a range. These ranges aren't documented and may not be obvious even in a fully open source client, but if you don't adhere to them, stuff will break.

> Telegram has proper native clients

They're not: they reimplement their own frameworks on top of relatively low-level UI primitives.

Sounds native to me.

Non-native to me is typically a a pure web client or when you use Java Swing or Electron.

What do you mean by native?

I generally have a strict definition of native which means “using platform widgets”. Telegram doesn’t do this because it makes its own copies of almost everything.