{"id":28003,"date":"2017-09-13T09:08:14","date_gmt":"2017-09-13T07:08:14","guid":{"rendered":"https:\/\/mamchenkov.net\/wordpress\/?p=28003"},"modified":"2019-02-19T12:57:11","modified_gmt":"2019-02-19T10:57:11","slug":"on-semantic-versioning","status":"publish","type":"post","link":"https:\/\/mamchenkov.net\/wordpress\/2017\/09\/13\/on-semantic-versioning\/","title":{"rendered":"On Semantic Versioning"},"content":{"rendered":"<!-- google_ad_section_start -->\n<p><a href=\"https:\/\/i0.wp.com\/mamchenkov.net\/wordpress\/wp-content\/uploads\/2017\/09\/versioning.jpg?ssl=1\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" data-attachment-id=\"28004\" data-permalink=\"https:\/\/mamchenkov.net\/wordpress\/2017\/09\/13\/on-semantic-versioning\/versioning\/\" data-orig-file=\"https:\/\/i0.wp.com\/mamchenkov.net\/wordpress\/wp-content\/uploads\/2017\/09\/versioning.jpg?fit=650%2C609&amp;ssl=1\" data-orig-size=\"650,609\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"versioning\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/mamchenkov.net\/wordpress\/wp-content\/uploads\/2017\/09\/versioning.jpg?fit=650%2C609&amp;ssl=1\" class=\"aligncenter size-medium wp-image-28004\" src=\"https:\/\/i0.wp.com\/mamchenkov.net\/wordpress\/wp-content\/uploads\/2017\/09\/versioning-500x468.jpg?resize=500%2C468&#038;ssl=1\" alt=\"\" width=\"500\" height=\"468\" srcset=\"https:\/\/i0.wp.com\/mamchenkov.net\/wordpress\/wp-content\/uploads\/2017\/09\/versioning.jpg?resize=500%2C468&amp;ssl=1 500w, https:\/\/i0.wp.com\/mamchenkov.net\/wordpress\/wp-content\/uploads\/2017\/09\/versioning.jpg?w=650&amp;ssl=1 650w\" sizes=\"auto, (max-width: 500px) 100vw, 500px\" \/><\/a><\/p>\n<p>First of all, you should know that <a href=\"http:\/\/www.commitstrip.com\/en\/2017\/09\/12\/versioning-is-important\/\">versioning is important<\/a>.\u00a0 Even the worst versioning practices provide more value than no versioning at all.\u00a0 At <a href=\"https:\/\/github.com\/QoboLtd\">work<\/a>, we are big fans of the <a href=\"http:\/\/semver.org\/\">Semantic Versioning<\/a>, and we use it for all our projects, plugins, and libraries.\u00a0 And I think, you should do too.<\/p>\n<p>In general, Semantic Versioning works great for us.\u00a0 But there were a few bumps recently, with more and more libraries dropping support for PHP 5.6 and requiring PHP 7.\u00a0 I can&#8217;t blame them &#8211; after all PHP 5.6 has reached its <a href=\"http:\/\/php.net\/supported-versions.php\">end of life<\/a> quite a while ago.<\/p>\n<p>It&#8217;s not what the maintainers do, but how they do it that I have an issue with.\u00a0 I&#8217;ve been thinking about writing a blog post on the subject for a few month now.\u00a0 Never got to it.\u00a0 And yesterday I came across <a href=\"http:\/\/paul-m-jones.com\/archives\/6661\">this blog post<\/a> by <a href=\"http:\/\/paul-m-jones.com\/\">Paul Jones<\/a>, which is so much better than whatever I was about to say.\u00a0 Paul explains the problem in detail and suggests the &#8220;System&#8221; addendum to Semantic Versioning:<\/p>\n<blockquote><p>I opine that requiring a change in the public environment into which a package is installed is just as major an incompatibility as introducing a breaking change to the public API of the package. To cover that case, I offer the following as a draft addendum to the SemVer spec:<\/p>\n<ul>\n<li>If the package consumer has to change a publicly-available system resource to upgrade a package, then the package upgrade is not backwards-compatible with the existing system, and the package SHOULD receive a major version bump.<\/li>\n<\/ul>\n<p>Using \u201cSHOULD\u201d makes this rule somewhat less strict than the MUST of a major version bump when changing the package API.<\/p><\/blockquote>\n<p>Coming back to PHP 5.6 vs PHP 7, that would suggest that maintainers who drop support for PHP 5.6 SHOULD bump up the MAJOR release of the library.\u00a0 \u00a0And I wholeheartedly agree with that!<\/p>\n<p>P.S.: For those of you who don&#8217;t or can&#8217;t use Semantic Versioning for whatever reason, checkout Paul&#8217;s blog post on <a href=\"http:\/\/dafoster.net\/articles\/2015\/03\/14\/semantic-versioning-vs-romantic-versioning\/\">Semantic Versioning vs. Romantic Versioning<\/a>.<\/p>\n<!-- google_ad_section_end -->\n","protected":false},"excerpt":{"rendered":"<!-- google_ad_section_start -->\n<p>First of all, you should know that versioning is important.\u00a0 Even the worst versioning practices provide more value than no versioning at all.\u00a0 At work, we are big fans of the Semantic Versioning, and we use it for all our projects, plugins, and libraries.\u00a0 And I think, you should do too. In general, Semantic Versioning &hellip; <a href=\"https:\/\/mamchenkov.net\/wordpress\/2017\/09\/13\/on-semantic-versioning\/\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">On Semantic Versioning<\/span><\/a><\/p>\n<!-- google_ad_section_end -->\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"On Semantic Versioning #WebDev #Programming #VersionControl #BestPractices #PHP","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"_links_to":"","_links_to_target":""},"categories":[1,18,62,1334],"tags":[3069,38,3318,1588,1330],"keyring_services":[],"class_list":["post-28003","post","type-post","status-publish","format-standard","hentry","category-general","category-programming","category-technology","category-web-work","tag-best-practices","tag-php","tag-qobo","tag-version-control","tag-web-development"],"aioseo_notices":[],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack-related-posts":[{"id":34991,"url":"https:\/\/mamchenkov.net\/wordpress\/2019\/02\/18\/semantic-versioning-why-you-should-care\/","url_meta":{"origin":28003,"position":0},"title":"Semantic Versioning &#8211; why you should care","author":"Leonid Mamchenkov","date":"February 18, 2019","format":false,"excerpt":"\"Semantic Versioning - why you should care\" is a nice take on Semantic Versioning and how and why people should is. I particularly liked the practical examples of changes and which version bump they correspond to. I frequently find myself explaining the Semantic Versioning to developers, and going over some\u2026","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":28630,"url":"https:\/\/mamchenkov.net\/wordpress\/2018\/06\/15\/semantic-versioning-version-0-is-unstable\/","url_meta":{"origin":28003,"position":1},"title":"Semantic Versioning : Version 0 is unstable","author":"Leonid Mamchenkov","date":"June 15, 2018","format":false,"excerpt":"We've been using Semantic Versioning for quite a while at work now.\u00a0 It's easy to explain and follow, and it provides valuable context to the numerous releases of the projects and components that we are doing on a daily basis. Turns out, however, that I missed a small, but important\u2026","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":16556,"url":"https:\/\/mamchenkov.net\/wordpress\/2012\/07\/23\/semantic-versioning\/","url_meta":{"origin":28003,"position":2},"title":"Semantic Versioning","author":"Leonid Mamchenkov","date":"July 23, 2012","format":false,"excerpt":"A lot of my work these days is all around web projects, where versions aren't particularly used. \u00a0Code is written, tested, and deployed multiple times a day, rather than once in a while. \u00a0But if you are doing scheduled releases with major and minor changes, backward compatibility and so forth,\u2026","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":47591,"url":"https:\/\/mamchenkov.net\/wordpress\/2020\/03\/12\/tips-for-implementing-a-software-release-process\/","url_meta":{"origin":28003,"position":3},"title":"Tips for Implementing a Software Release Process","author":"Leonid Mamchenkov","date":"March 12, 2020","format":false,"excerpt":"I came across this nice article outlining some of the tips for implementing the software release process. Software Development process is not complete and mature without a well-defined release process for the software applications. Every software application needs to be delivered or deployed at some point in time and for\u2026","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":27142,"url":"https:\/\/mamchenkov.net\/wordpress\/2016\/12\/16\/php-package-development-standards\/","url_meta":{"origin":28003,"position":4},"title":"PHP Package Development Standards","author":"Leonid Mamchenkov","date":"December 16, 2016","format":false,"excerpt":"Paul M. Jones announces the availability of PHP Package Development Standards for review: This initiative researches the PHP package ecosystem to recognize commonly adopted development practices. It rationalizes and refines those practices, then publishes them as PDS packages for reference by PHP package authors. PDS publications are derived from and\u2026","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":16583,"url":"https:\/\/mamchenkov.net\/wordpress\/2012\/07\/29\/weekly-digest-2012-07-29\/","url_meta":{"origin":28003,"position":5},"title":"Weekly digest &#8211; 2012-07-29","author":"Leonid Mamchenkov","date":"July 29, 2012","format":false,"excerpt":"The Secret Online Weapons Store That\u2019ll Sell Anyone Anything http:\/\/t.co\/kyUIHSzG # How to get rid of me http:\/\/t.co\/AZJEC18R # I can't believe it's Monday already. Her we go all over again... # SL4A - scripting layer for Android http:\/\/t.co\/A0tE8lLx # HTML5 splits into two standards http:\/\/t.co\/bW7OHhPt # Economic impact of\u2026","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"jetpack_sharing_enabled":true,"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/posts\/28003","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/comments?post=28003"}],"version-history":[{"count":0,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/posts\/28003\/revisions"}],"wp:attachment":[{"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/media?parent=28003"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/categories?post=28003"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/tags?post=28003"},{"taxonomy":"keyring_services","embeddable":true,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/keyring_services?post=28003"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}