They reluctantly acknowledged that as a mistake by adding an actual "optional" modifier for field presence. proto3's previously so-called optional were really all present with a zero default value; proto2 could have supported that for required fields at the code level if they had wanted. In the end, all they've changed is how they frame the feature.