€•ð†Œsphinx.addnodes”Œdocument”“”)”}”(Œ rawsource”Œ”Œchildren”]”(Œ translations”Œ LanguagesNode”“”)”}”(hhh]”(hŒ pending_xref”“”)”}”(hhh]”Œdocutils.nodes”ŒText”“”ŒChinese (Simplified)”…””}”Œparent”hsbaŒ attributes”}”(Œids”]”Œclasses”]”Œnames”]”Œdupnames”]”Œbackrefs”]”Œ refdomain”Œstd”Œreftype”Œdoc”Œ reftarget”Œ//translations/zh_CN/process/stable-api-nonsense”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)”}”(hhh]”hŒChinese (Traditional)”…””}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ//translations/zh_TW/process/stable-api-nonsense”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒItalian”…””}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ//translations/it_IT/process/stable-api-nonsense”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒJapanese”…””}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ//translations/ja_JP/process/stable-api-nonsense”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒKorean”…””}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ//translations/ko_KR/process/stable-api-nonsense”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒSpanish”…””}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ//translations/sp_SP/process/stable-api-nonsense”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒtarget”“”)”}”(hŒ.. _stable_api_nonsense:”h]”h}”(h]”h ]”h"]”h$]”h&]”Œrefid”Œstable-api-nonsense”uh1h¡h KhhhžhhŸŒI/var/lib/git/docbuild/linux/Documentation/process/stable-api-nonsense.rst”ubhŒsection”“”)”}”(hhh]”(hŒtitle”“”)”}”(hŒ!The Linux Kernel Driver Interface”h]”hŒ!The Linux Kernel Driver Interface”…””}”(hh·hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hµhh²hžhhŸh¯h KubhŒ paragraph”“”)”}”(hŒ.(all of your questions answered and then some)”h]”hŒ.(all of your questions answered and then some)”…””}”(hhÇhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÅhŸh¯h Khh²hžhubhÆ)”}”(hŒ#Greg Kroah-Hartman ”h]”(hŒGreg Kroah-Hartman <”…””}”(hhÕhžhhŸNh NubhŒ reference”“”)”}”(hŒgreg@kroah.com”h]”hŒgreg@kroah.com”…””}”(hhßhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”Œmailto:greg@kroah.com”uh1hÝhhÕubhŒ>”…””}”(hhÕhžhhŸNh Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÅhŸh¯h Khh²hžhubhÆ)”}”(hŒŠThis is being written to try to explain why Linux **does not have a binary kernel interface, nor does it have a stable kernel interface**.”h]”(hŒ2This is being written to try to explain why Linux ”…””}”(hhùhžhhŸNh NubhŒstrong”“”)”}”(hŒW**does not have a binary kernel interface, nor does it have a stable kernel interface**”h]”hŒSdoes not have a binary kernel interface, nor does it have a stable kernel interface”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhùubhŒ.”…””}”(hhùhžhhŸNh Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÅhŸh¯h K hh²hžhubhŒnote”“”)”}”(hXðPlease realize that this article describes the **in kernel** interfaces, not the kernel to userspace interfaces. The kernel to userspace interface is the one that application programs use, the syscall interface. That interface is **very** stable over time, and will not break. I have old programs that were built on a pre 0.9something kernel that still work just fine on the latest 2.6 kernel release. That interface is the one that users and application programmers can count on being stable.”h]”(hÆ)”}”(hŒpPlease realize that this article describes the **in kernel** interfaces, not the kernel to userspace interfaces.”h]”(hŒ/Please realize that this article describes the ”…””}”(hj!hžhhŸNh Nubj)”}”(hŒ **in kernel**”h]”hŒ in kernel”…””}”(hj)hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj!ubhŒ4 interfaces, not the kernel to userspace interfaces.”…””}”(hj!hžhhŸNh Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÅhŸh¯h KhjubhÆ)”}”(hX~The kernel to userspace interface is the one that application programs use, the syscall interface. That interface is **very** stable over time, and will not break. I have old programs that were built on a pre 0.9something kernel that still work just fine on the latest 2.6 kernel release. That interface is the one that users and application programmers can count on being stable.”h]”(hŒvThe kernel to userspace interface is the one that application programs use, the syscall interface. That interface is ”…””}”(hjAhžhhŸNh Nubj)”}”(hŒ**very**”h]”hŒvery”…””}”(hjIhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjAubhX stable over time, and will not break. I have old programs that were built on a pre 0.9something kernel that still work just fine on the latest 2.6 kernel release. That interface is the one that users and application programmers can count on being stable.”…””}”(hjAhžhhŸNh Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÅhŸh¯h Khjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhh²hžhhŸh¯h Nubh±)”}”(hhh]”(h¶)”}”(hŒExecutive Summary”h]”hŒExecutive Summary”…””}”(hjjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hµhjghžhhŸh¯h KubhÆ)”}”(hX®You think you want a stable kernel interface, but you really do not, and you don't even know it. What you want is a stable running driver, and you get that only if your driver is in the main kernel tree. You also get lots of other good benefits if your driver is in the main kernel tree, all of which has made Linux into such a strong, stable, and mature operating system which is the reason you are using it in the first place.”h]”hX°You think you want a stable kernel interface, but you really do not, and you don’t even know it. What you want is a stable running driver, and you get that only if your driver is in the main kernel tree. You also get lots of other good benefits if your driver is in the main kernel tree, all of which has made Linux into such a strong, stable, and mature operating system which is the reason you are using it in the first place.”…””}”(hjxhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÅhŸh¯h Khjghžhubeh}”(h]”Œexecutive-summary”ah ]”h"]”Œexecutive summary”ah$]”h&]”uh1h°hh²hžhhŸh¯h Kubh±)”}”(hhh]”(h¶)”}”(hŒIntro”h]”hŒIntro”…””}”(hj‘hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hµhjŽhžhhŸh¯h K&ubhÆ)”}”(hŒÛIt's only the odd person who wants to write a kernel driver that needs to worry about the in-kernel interfaces changing. For the majority of the world, they neither see this interface, nor do they care about it at all.”h]”hŒÝIt’s only the odd person who wants to write a kernel driver that needs to worry about the in-kernel interfaces changing. For the majority of the world, they neither see this interface, nor do they care about it at all.”…””}”(hjŸhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÅhŸh¯h K(hjŽhžhubhÆ)”}”(hXàFirst off, I'm not going to address **any** legal issues about closed source, hidden source, binary blobs, source wrappers, or any other term that describes kernel drivers that do not have their source code released under the GPL. Please consult a lawyer if you have any legal questions, I'm a programmer and hence, I'm just going to be describing the technical issues here (not to make light of the legal issues, they are real, and you do need to be aware of them at all times.)”h]”(hŒ&First off, I’m not going to address ”…””}”(hj­hžhhŸNh Nubj)”}”(hŒ**any**”h]”hŒany”…””}”(hjµhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj­ubhX¹ legal issues about closed source, hidden source, binary blobs, source wrappers, or any other term that describes kernel drivers that do not have their source code released under the GPL. Please consult a lawyer if you have any legal questions, I’m a programmer and hence, I’m just going to be describing the technical issues here (not to make light of the legal issues, they are real, and you do need to be aware of them at all times.)”…””}”(hj­hžhhŸNh Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÅhŸh¯h K-hjŽhžhubhÆ)”}”(hŒÇSo, there are two main topics here, binary kernel interfaces and stable kernel source interfaces. They both depend on each other, but we will discuss the binary stuff first to get it out of the way.”h]”hŒÇSo, there are two main topics here, binary kernel interfaces and stable kernel source interfaces. They both depend on each other, but we will discuss the binary stuff first to get it out of the way.”…””}”(hjÍhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÅhŸh¯h K5hjŽhžhubeh}”(h]”Œintro”ah ]”h"]”Œintro”ah$]”h&]”uh1h°hh²hžhhŸh¯h K&ubh±)”}”(hhh]”(h¶)”}”(hŒBinary Kernel Interface”h]”hŒBinary Kernel Interface”…””}”(hjæhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hµhjãhžhhŸh¯h K;ubhÆ)”}”(hŒÀAssuming that we had a stable kernel source interface for the kernel, a binary interface would naturally happen too, right? Wrong. Please consider the following facts about the Linux kernel:”h]”hŒÀAssuming that we had a stable kernel source interface for the kernel, a binary interface would naturally happen too, right? Wrong. Please consider the following facts about the Linux kernel:”…””}”(hjôhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÅhŸh¯h K