Re: [ANNOUNCE] Introducing Codezero

Bahadir Balban <[email protected]>
Newsgroups gmane.os.hurd.l4
Message-ID <[email protected]>
[email protected] wrote:
> Hi,
> 
> On Mon, Jul 13, 2009 at 10:47:37AM +0300, Bahadir Balban wrote:
> 
>> I don't have a goal of implementing the ultimate microkernel desktop
>> system. My focus is on embedded systems.
> 
> Well, you certainly made your original post sound like if you believe
> your work is compatible with the Hurd goals; but now you admit that it
> actually isn't...
> 

What I see in Hurd is a multi-server POSIX compatible OS core based
around a truly microkernel design. I accept certain lacking parts, but
by this definition my work is not that far from it. Especially that the
non-trivial OS services are there (memory management and file
management) its the protocol that lacks mostly on the Hurd design ideas,
i.e. distributed path navigation & a dynamic security mechanism.

>> But I can argue that L4 is the best candidate for a microkernel based
>> OS in general.
> 
> Not really. Shapiro has put it pretty well: one of the L4-based projects
> (don't remember the name right now) showed that it *is* possible to
> build such a system on top of L4 -- but only at prohibitive costs...
> 
> This confirms our own conclusions from the Hurd/L4 experiment:
> implementing capabilities in user space on top of L4 requires a lot of
> effort and introduces a lot of overhead.
> 

This claim was probably made with many assumptions that narrowed down
the example case to produce a negative result. In other words, perhaps
the way it's design was anticipated was costly. I always think there can
be a new perspective.

Having all capabilities maintained by the microkernel will add policy to
it and inflate it, so it will somewhat deviate from a rigorous
microkernel design. If you believe that to be more appropriate for
maintaining security, it may be a reasonable tradeoff for you.

However, a significant goal in Codezero is to remain generic for
building any OS core on top. In that respect, no OS specific policy is
allowed inside. Keeping userspace capabilities in the kernel would be
against that principle.

I am currently implementing capabilities for kernel resources though.
That is a generic necessity and it makes sense to have it.

>> A user program is granted a capability as above from an authorization
>> server. The capability is most likely one that allows communication
>> with a service. The service obtains a copy of this capability from the
>> auth server, and whenever the user program calls the server (it also
>> has an ipc capability to it) the server checks the request from its
>> capid, and either accepts or refuses to take it. So capability
>> validity checking is distributed to those resources that are involved
>> in the capability.
> 
> This is not really realistic. For one, it allows for DoS attacks, unless
> you can somehow guarantee that the resource usage of the validity check
> is accounted to the client -- probably possible, but quite tricky.
> 

OK I have thought about this, and actually you have a point that
checking in the kernel can be easily accounted to the client, since
kernel execution is also part of that thread's timeslice.

> And then there is the overhead.

I am not sure about the overhead. If the service possesses a copy of the
capabilities to itself that its clients have, the checking is simply
done in the server in the form of a function that would otherwise be
placed in the kernel.

Capabilities would be sent to the server during mounting of the server
as a service or during open(). From that point on, each request is a
single call to the server.

But anyway before I get that far, I am currently implementing
capabilities for the microkernel resources, first.

> EROS has proven that kernel-based capabilities can be implemented with
> no noticable overhead... So this exercise is really pointless -- once we
> have a capability-enabled kernel, there is no reason to avoid using
> them.

> Lack of capabilities is not the only problem with traditional L4. The
> purely synchronous IPC for example also turned out problematic, as well
> as the fact that the kernel allocates memory on behalf of user
> processes.
> 

It is trivial to implement asynchronous messaging in L4, and I agree
that there are occasions where it is necessary. However, asynchronous
programming is a bad programming practice, and if you think of making it
a central part of your communication protocol this is a very very bad idea.

In latest L4 designs (and in Codezero) the kernel does not allocate for
userspace. I've implemented a complete pager with no relationship with
the kernel on memory usage.

> Experience shows that microkernels are not really reusable, except for
> systems with very similar requirements. The requirements of the Hurd are
> very different from those of typical L4 use cases. Viengoos is partially
> based on L4 ideas, but specifically designed to fit the requirements of
> a system like the Hurd -- anything more similar to the traditional L4
> will probably have some shortcomings for us...
> 
> -antrik-
> 

 From this discussion I see that the only major difference is managing
userspace capabilities inside the microkernel. I will look into that
option by adding a capability extension on the ipc request type. Each
ipc request number would be then subject to kernel's capability checking.

I am interested in Hurd because originally my idea of building a solid
microkernel-based OS closely relates to Hurd goals, even though some
design ideas seem to be different. Hopefully Codezero may provide a
viable alternative.


Thanks,

-- 
Bahadir Balban
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.