You can use the latest version but still use a corpus files syntax="proto2" files.
Marking required fields as optional is not the only difference (and, in proto2, that is not a particularly safe operation -- you must be certain you've updated
all readers of those messages with the new definition
before any writers actually choose to omit those fields).
If you are using default values or extensions, your migration to proto3 syntax will be trickier as neither is supported. Also, proto3 doesn't provide accessor methods to detect whether a field is present or not (it is implicitly absent if it has the "zero value" for its type).
Luckily, you can start using the latest protoc and then slowly migrate. The proto compiler does allow a mix of proto2 and proto3 syntax files -- proto3 files can import proto2 files (though I can't recall if the other direction is allowed -- I think it is though, to support custom options that might reference messages defined in proto3). One path for migration is to start using proto3 for all new files. This gives you optionality as far as how and when to convert the rest.
If you don't use default values or extensions, converting a proto2 syntax file to proto3 is quite simple. But, depending on the language you use, it will impact application code that interacts with the generated code. (Proto3 files do not generate pointers in the structs for scalar fields, for example.) Also note that custom options
are still supported, but since they rely on extensions they must be defined in a file with proto2 syntax.