{"id":25,"date":"2007-09-06T14:56:35","date_gmt":"2007-09-06T12:56:35","guid":{"rendered":"http:\/\/daniel.haxx.se\/blog\/2007\/09\/06\/abi-breakage\/"},"modified":"2025-09-06T12:29:35","modified_gmt":"2025-09-06T10:29:35","slug":"abi-breakage","status":"publish","type":"post","link":"https:\/\/daniel.haxx.se\/blog\/2007\/09\/06\/abi-breakage\/","title":{"rendered":"ABI Breakage"},"content":{"rendered":"\n<p><a title=\"6\" name=\"6\"><\/a><em>Domenico Andreoli<\/em>, the <a href=\"http:\/\/www.debian.org\/\">Debian<\/a> <a href=\"http:\/\/qa.debian.org\/developer.php?login=cavok@debian.org\">curl and libcurl maintainer<\/a> <a href=\"http:\/\/curl.haxx.se\/mail\/lib-2007-09\/0006.html\">posted to the curl-library list<\/a> about the recent libcurl <a href=\"http:\/\/en.wikipedia.org\/wiki\/Soname\">soname<\/a> <a href=\"http:\/\/curl.haxx.se\/changes.html#7_16_0\">bump<\/a> and the related issue of <a href=\"http:\/\/en.wikipedia.org\/wiki\/Application_binary_interface\">ABI<\/a> breakage.<\/p>\n\n\n\n<p>I <a href=\"http:\/\/curl.haxx.se\/mail\/lib-2007-09\/0010.html\">responded<\/a>, explaining my view on why the soname bump from 3 to 4 was valid, but I&#8217;ve also gone back in my mail archives and checked out a private discussion I had with Bjorn Reese over this subject a long time ago and I feel it is about time it hits the air.<\/p>\n\n\n\n<p><strong>An ABI breakage occurs when one or more of the following changes are made<\/strong><\/p>\n\n\n\n<p>Functions:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Change function names<\/li>\n\n\n\n<li>Remove existing functions<\/li>\n\n\n\n<li>Change parameters<\/li>\n\n\n\n<li>Change behavior<\/li>\n\n\n\n<li>Change undefined behavior<\/li>\n\n\n\n<li>Add dependence on other functions  (e.g. A() must be called before B())<\/li>\n<\/ul>\n\n\n\n<p>Data structures:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Change the order of elements<\/li>\n\n\n\n<li>Add elements<\/li>\n\n\n\n<li>Remove elements<\/li>\n\n\n\n<li>Change the data type or size<\/li>\n\n\n\n<li>Change alignment<\/li>\n\n\n\n<li>Change element values  (e.g. change bits in flag variables)<\/li>\n<\/ul>\n\n\n\n<p>Global variables:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Change variable names or types<\/li>\n\n\n\n<li>Remove variables<\/li>\n<\/ul>\n\n\n\n<p>Update: Dan Fandrich posted on the curl-library list and mentioned Mike Hearn&#8217;s great related page: <a href=\"http:\/\/plan99.net\/~mike\/writing-shared-libraries.html\">Writing shared libraries<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Domenico Andreoli, the Debian curl and libcurl maintainer posted to the curl-library list about the recent libcurl soname bump and the related issue of ABI breakage. I responded, explaining my view on why the soname bump from 3 to 4 was valid, but I&#8217;ve also gone back in my mail archives and checked out a &hellip; <a href=\"https:\/\/daniel.haxx.se\/blog\/2007\/09\/06\/abi-breakage\/\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">ABI Breakage<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":5,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7,11,6],"tags":[],"class_list":["post-25","post","type-post","status-publish","format-standard","hentry","category-curl","category-development","category-floss"],"_links":{"self":[{"href":"https:\/\/daniel.haxx.se\/blog\/wp-json\/wp\/v2\/posts\/25","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/daniel.haxx.se\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/daniel.haxx.se\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/daniel.haxx.se\/blog\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/daniel.haxx.se\/blog\/wp-json\/wp\/v2\/comments?post=25"}],"version-history":[{"count":1,"href":"https:\/\/daniel.haxx.se\/blog\/wp-json\/wp\/v2\/posts\/25\/revisions"}],"predecessor-version":[{"id":28147,"href":"https:\/\/daniel.haxx.se\/blog\/wp-json\/wp\/v2\/posts\/25\/revisions\/28147"}],"wp:attachment":[{"href":"https:\/\/daniel.haxx.se\/blog\/wp-json\/wp\/v2\/media?parent=25"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/daniel.haxx.se\/blog\/wp-json\/wp\/v2\/categories?post=25"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/daniel.haxx.se\/blog\/wp-json\/wp\/v2\/tags?post=25"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}