I tried to use ASN.1 and there were no libraries to use at the time. Protocol buffers exist to product compact messages where varint encoding can shine, and to produce forward-compatible messages when server schemas get updated (I don't know how ASN.1 handles that).