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.
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.