En ce moment je dois expliquer les défauts de Protobuf v2 et pourquoi il est préférable de s'appuyer sur Protobuf v3 à la place.
En substance, c'est à cause des mots-clefs optional et required.
Je m'explique, une fois qu'un champ est flagué à required, que votre format se sera diffusé auprès d'autres systèmes et que forcément ces mêmes systèmes vont se parler entre-eux avec ce format Protobuf, alors il ne vous sera plus jamais possible de supprimer ce champ.
D'où le required is forever...
Protobuf v3 supprime les notions d'optional et required, ce qui fait que tous les champs deviennent optionnels de manière implicite (à l'image de JSON que je préfère largement à Protobuf).
Citation tirée de la doc officielle :
Required Is Forever You should be very careful about marking fields as required. If at some point you wish to stop writing or sending a required field, it will be problematic to change the field to an optional field – old readers will consider messages without this field to be incomplete and may reject or drop them unintentionally. You should consider writing application-specific custom validation routines for your buffers instead. Within Google, required fields are strongly disfavored; most messages defined in proto2 syntax use optional and repeated only. (Proto3 does not support required fields at all.)