&gt;  It&#x27;s the lingua franca for describing libraries, and tooling (such as Rust&#x27;s bindgen, or Python&#x27;s cffi) can consume them to do the setup&#x2F;create the information necessary to call functions from other languages.<p>Hence the &quot;not necessarily&quot; in my comment. The parent seemed to be painting this as extra unnecessary work; I was saying that a header file is _not_ necessary except for binding to C&#x2F;C++.<p>If you want to write a C API that will be called from many languages; you should have a header file so that bindgen tools can consume it. If you want an API that will only be called by Python .... not so necessary, you may want a header file anyway but it depends on the situation.<p>&gt; Or... C?<p>Sure, goes without saying :)