Semantic VersioningとScala界隈

微妙に混乱しそうな場面をある程度の頻度で見かけるので、用語の認識を共有してから話をしよう、みたいなことをかく。


Semantic Versioning自体の詳細な説明はしません、ある程度理解してる前提で話します。

まず前提として、2016年現在のScalaやplay frameworkはSemantic Versioningに従っていません


従っているライブラリもある程度は存在してる可能性もありますが、まぁとりあえず有名なScalaとplayframeworkみたいな感じのものについて話をします。
Scala自体が従ってないから、他の言語界隈にくらべて、もしかすると従ってないライブラリが多い(もしくはずっと0.x.yのまま)気がしています。(他の言語界隈詳しくないので適当です)



ある程度以下のようなやりとりを見かけることがありますが、


「〇〇は、マイナーバージョン間で変わりすぎ」

「〇〇は、マイナーバージョン感では(バイナリ)互換を保っていますよ」



上記の会話を見かけると、色んな意味でモヤモヤします。

もし〇〇がScala自体やplay frameworkで

  • 前者の愚痴(?)が、"Semantic Versioning"においての"マイナーバージョン"として言っているなら、Scalaやplay frameworkはSemantic Versioningに則っていないので、2.x.yのx部分が変わった場合に互換を期待するのが間違っている
  • 前者の愚痴(?)が、暗黙的に「独自versioning規則やめろ、Semantic Versioning守れや!」という主張なら、まぁわかる(?)
  • 後者の反論が「2.x.yのxが変わらずにy部分が変わる場合」について言っているなら、たしかにそうなのだが、Semantic Versioningにおいては "メジャー . マイナー . パッチ" なため、お互いが、"Semantic Versioning"にもとづいて言っているのか、2.x.yのx部分について言うつもりだったのか、y部分について言うつもりだったのか、まぁなんかいろいろあって混乱が生じるので「マイナーバージョン感では(バイナリ)互換を保っていますよ」という言い方は(個人的には)やめたほうが良いと思ってる


なので個人的には短く返答する場合は「2.x.yのy部分変わる場合はバイナリ互換保ってますよ」みたいな言い方する。


しかし、何度か見かけてモヤモヤしたので、わざわざblog書きました。


今度からは自分も(みなさんも?)このblogのリンク貼りましょう?


過去のバイナリ互換関連に書いたものも参考に貼っておきますね
Scalaのversion間の非互換について具体的に考える

その他: http://d.hatena.ne.jp/xuwei/archive?word=%B8%DF%B4%B9+scala