I’ve always been skeptical about version numbering starting from zero. Versions like 0.5.2, and especially 0.1.0, still bother me. They imply a sense of incompleteness. Who came up with such strange numbering? If starting from zero, why not 0.0.0? I assume it seemed convenient to number preparatory work—whose utility isn’t self-evident—and then switch to 1.0.0 upon release.

What about Version 2?

A logical question arises: what about version 2.0.0? We cannot use 1.X.X versions for its preparation. It might seem logical to use even versions for development and odd ones for release. However, this practice is rare as it confuses those unfamiliar with it. For example, it’s confusing when version 3.0.0 follows 2.7.5 with no significant differences.

Why Not Start with 1?

This seems like a dead end, but fortunately, semantic versioning and other schemes offer ways to mark pre-release versions, such as appending alphanumerics like 1.0.0-alpha.1. This usually solves the problem. While version sorting can be tricky, the method proposed by the semantic versioning standard works well.

In summary, I avoid using zero versions and try to steer clear of libraries or programs with zero versions. I recommend avoiding zero at the start of a version number, or at least avoiding zero versions when publishing a library or program.