>>951130
The main attraction of seL4 is the strict isolation of programs it provides, the kernel is formally proven to only allow programs to access memory regions they have been allocated (either memory allocated specifically for that program or memory allocated as a shared buffer between it and another program).
Say you have two programs and a DMA capable peripheral device
>Program A which is a user application
>Program B which is a GPU driver
>Device C which is a GPU capable of self hosted DMA
You also have four memory regions managed by seL4
>Memory regions 1 and 2 which are large and exclusively allocated to A and B respectively (1 can only be accessed by A and 2 can only be accessed by B)
>Memory region 3 which is small and able to be accessed by A and B
>Memory region 4 which represents C and can be accessed by B
The IOMMU on the processor is configured to not allow C to access anything other than 3, from the perspective of C the only memory in the system is 3.
When A wants to have C display something it writes data to the shared memory region 3 and informs B that there is something to display. B then looks at the data in 3 and informs C what it needs to do by sending a message to it by writing to 4. C, having received instructions from B, uses its DMA engines to access 3 and copy the data to itself and then do what it needs to do to display what A wanted on the screen.
Why it doesn't matter if B is a binary blob is because it has no privileges, unlike with monolithic and hybrid kernel architectures which have device drivers run in privileged mode (and can therefore access any region of memory it wishes) it can only access what it needs in order to perform its task of controlling the GPU. To complement this the IOMMU is setup to only allow C to access the memory it needs, B can't use the DMA engines of C to bypass the restrictions imposed on it by seL4 (this isn't something which is practical in monolithic and hybrid kernel architectures).
>>951298
And whats really frustrating with the Linux kernel is that much of that code is there to provide backwards compatibility to hardware and software from 20 years ago, there is also code bloat because its all written in C rather than languages which have native support for things like OO. If a group of developers were to rewite Linux in C++ and only support current generation hardware then I suspect the result would be somewhere around 4 million lines of code.