Re: Header files and the kernel ABI

Andreas Dilger
2002-07-25T07:30:48Z

On Jul 25, 2002 00:07 -0700, H. Peter Anvin wrote:
> Andreas Dilger wrote:
> >The kernel side would be something like <linux/scsi.h> includes
> ><linux/abi/scsi.h> or whatever, but in the future this can be included
> >directly as needed throughout the kernel. The existing kernel
> ><linux/*.h> headers would also have extra kernel-specific data in them.
> >
> >The same could be done with the user-space headers, but I think that
> >is missing the point that the linux/abi/*.h headers should define _all_
> >of the abi, so we may as well just use that directly.
>
> Except now the paths are gratuitously different between kernel
> programming and non-kernel programming, and we create a much harder
> migration problem. I'd rather leave the linux/* namespace to the
> user-space libc to do whatever backwards compatibility cruft they may
> consider necessary, for example, <linux/io.h> might #include <sys/io.h>
> since some user space apps bogusly included the former name. Leaving
> that namespace available for backwards compatibility hacks avoids those
> kinds of problems.

OK, but essentially then <linux/io.h> will be mostly a hollow shell
which includes <linux/abi/io.h> and maybe a couple other files
(e.g. <linux/abi/types.h> or similar). If so, then great.

That brings up the question - how do you tie a particular
<linux/abi/*.h> to a particular kernel? Should there be a bunch of
directories <linux/abi-2.4/*.h> and/or <linux/abi-2.4.12/*.h> and/or
<linux/abi-`uname -r`/*.h> or what? While there are efforts to keep
the ABI constant for major stable releases, this is not always true,
so abi-2.4 will certainly not be enough. Maybe linux/abi is a symlink
to the abi directory of currently running kernel?

Cheers, Andreas
--
Andreas Dilger