On Fri, 8 Apr 2005, Sam Leffler wrote:
> Poul-Henning Kamp wrote:
>> In message <4256B3EF.5090702 at errno.com>, Sam Leffler writes:
>>>>> I agree with bde. One major distinction I've noticed between Linux and
>>> BSD systems is that Linux uses sysctls (aka /proc) in lieu of user-mode
>>> tools that retrieve and format data. While this is a reasonable approach
>>> when you're distributing only a kernel that's not the case here. For
>>> debug info I can buy doing it (e.g. single user and no apps
>>>>> from src/tools), but otherwise we're just adding stuff to the kernel
>>>>> that belongs in apps.
>>>> The reason I disagree is that the amount of code it takes to convert
>> the data to an export format and the overhead of having a program in
>> userspace format it into text is ridiculous compared to just formatting
>> things in the kernel to begin with.
>> My experience is the opposite.
Mine too. In the kernel, as in userland, it takes almost no code, or
at least very simple code, to [s]printf the data once you have assembled
it and decided the format. Deciding the format can take a lot of code,
but the kernel cannot do complicated formats that handles the user's
screen size, etc., so the formatting part is simpler than possible in
the kernel. Then userland has to do extra work to parse the poorly
formatted unstructured data if it wants to present it in a different or
better way, so doing everything in the kernel only takes less code if
no applications do this.
>> And besides, a formatted sysctl has no binary compatibility issues at
>> all. I like that too.
>> Sure, that's the downside; you need to design binary protocols with care
> (this is a protocol after all).
The same is true for ASCII protocols. Unstructured ones are hard to
change for both. You might be able to change whitespace in an
undocumented unstructured ASCII "protocol" without affecting userland
parsers, but you can't add an extra column to tabular output without
breaking things.
Bruce