Current-Users archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: i386 and the COMPAT_50 option
On Fri, Jan 23, 2009 at 06:15:32PM +0000, Christos Zoulas wrote:
> In article <200901231755.n0NHtla3004644%lothlorien.nfbcal.org@localhost>,
> Brian Buhrow <buhrow%lothlorien.nfbcal.org@localhost> wrote:
>
> > Hello. Sorry if this is a dumb question, but doesn't this change sort
> >of imply that if I want to change my compatibility options, I now have to
> >modify more than just a config file? I now have to modify Makefiles all
> >over the system as well as the config file? that seems like a step
> >backward, or I'm missing something completely obvious.
> >-Brian
>
> It is even worse than that... Here's an explanation:
>
> Most compat code has been pushed into a module. Kernels without
> compat options, will load the compat module when a system call is
> needed. Unfortunately this does not cover all the bases; there are
> other compat hooks to functions for example in the routing socket
> code (net/rtsock.c) some ioctls, setsockopt, event reading code in
> wscons just to name a few. All this kernel compat code is conditionally
> compiled with #ifdef COMPAT_XX. So if you go in the pure module
> route, you'll lose the compatibility provided by those hooks so
> more things might not work. Currently the only way to provide full
> compat functionality is to define COMPAT_XX in your kernel. This
> is not ideal, because we would really like to push all that code
> into modules. Alas it is not as easy. Some solutions are:
>
> 1. Don't provide compatibility.
> + Simplifies code
> - Some programs don't work...
> 2. Always compile the hooks in the kernel, not conditionally.
> + Bloat
> - Difficult to separate compat and non-compat code.
> 3. Add indirection variables instead of hooks in the kernel
> and auto-load the compat module if the hooks detect that
> it is not.
> + clean
> - complicated
> 4. ?
Here are some more options to consider:
3. Structure the compat code as a full blown emulation like compat_linux.
Select it depending on binary type / ELF note. All compat code lives in
the module.
4. Give up and don't support native compat as a module. It was only 20kB
last time I looked and is not a security hole (excluding SA), so perhaps
it is just not worth the hassle. The emulations are easy to make into /
sustain as modules so this argument does not apply to them.
5. As #4 but don't even bother with release level granularity as the only
rational excuse for this is to make the kernel build with newer
architectures.
6. Make native compatibility non-optional. Weeping and gnashing of teeth
ensues.
Andrew
Home |
Main Index |
Thread Index |
Old Index