1. What are the conceptual and structural differences between a Linux-Kernel and a BSD-kernel?
Regarding architecture and internal structures, there are of course differences on how things are done (ie: lvm vs geom, early and complex jail feature for FreeBSD, ...), but overall there are not that much differences between the two:
- BSD* kernel and Linux kernel have both evolved from a purely monolithic approach to something hybrid/modular.
Still, there are fundamental differences in their approach and history:
- BSD-kernel are using BSD licence and Linux-kernel is using GPL licences.
- BSD-kernel are not stand-alone kernels but are developed as being part of a whole. Of course, this is merely a philosophical point of view and not a technical one, but this give system coherence.
- BSD-kernel are developed with a more conservative point-of_view and more concern about staying consistent with their approach than having fancy features.
- Linux-kernel are more about drivers, features, ... (the more the better).
As greatly stated somewhere else:
It is Intelligent Design and Order (BSD*) versus Natural Selection and Chaos (GNU/Linux).
2. In which scenarios would one kind of kernel have an advantage over the other?
About their overall structure and concept, while comparing an almost vanilla Linux-kernel and a FreeBSD-kernel, they are more or less of the same general usage level, that is with no particular specialization (not real-time, not highly paralleled, not game oriented, not embedded, ...).
Of course there are a few differences here and there, such as native ZFS support or the geom architecture for FreeBSD versus the many drivers or various file-systems for Linux. But nothing some general software such as web servers or databases would really use to make a real difference. Comparisons in these cases would most likely end in some tuning battle between the two, nothing major.
But, some would argue that OpenBSD has a deep and consistent approach to security, while hardened Linux distributions are "just" modified versions of the vanilla Linux-kernel. This might be true for such heavily specialized system, as would Steam-OS be the number one to play games.
3. Are there any joint efforts to concentrate forces for one common kernel or certain modules?
There is no joint effort to concentrate forces for one common kernel, as there are major licences, philosophical or approach issues.
If some real common efforts exist such as OpenZFS, most of the time it is more about drivers and concepts taken or inspired from one another.
Sorry, the accepted answer is bad information on several fronts.
/proc/sys/kernel/pid_max
has nothing to do with the maximum number of processes that can be run at any given time. It is, in fact, the maximum numerical PROCESS IDENTIFIER than can be assigned by the kernel.
In the Linux kernel, a process and a thread are one and the same. They're handled the same way by the kernel. They both occupy a slot in the task_struct data structure. A thread, by common terminology, is in Linux a process that shares resources with another process (they will also share a thread group ID). A thread in the Linux kernel is largely a conceptual construct as far as the scheduler is concerned.
Now that you understand that the kernel largely does not differentiate between a thread and a process, it should make more sense that /proc/sys/kernel/threads-max
is actually the maximum number of elements contained in the data structure task_struct. Which is the data structure that contains the list of processes, or as they can be called, tasks.
ulimit is, as the name implies, a per-user limit. The -u
flag is defined as "The maximum number of processes available to a single user". An element of task_struct contains the uid of the user that created the task. A per-uid count is maintained and incremented/decremented every time a task is added/removed from task_struct. So, ulimit -u
indicates the maximum number of elements (processes) that one particular user is allowed to have within task_struct at any given time.
I hope that clears things up.
Best Answer
You've identified pretty much the only difference: the Debian kernel can load firmware, the Linux-libre kernel can't. Both kernels are free software, even as far as the Free Software Foundation is concerned — the FSF considers the Debian GNU/Linux distribution to be free software as long as no repositories are used beyond the main one; the issue they have with Debian is that Debian hosts non-free repositories on the same infrastructure.
Philosophically speaking, you could consider the difference to be as follows:
Linux-libre is built by running a
deblob
script on the kernel source code. This goes through the kernel source code, and makes various firmware-related changes:firmware/radeon
) is removed.Some extra work goes into Linux-libre to restore functionality in certain cases; for example, the
radeon
module is modified so that somer600
-supported cards can still be used, even without firmware. (Look for "Something like this might work on other radeon cards too." in thedeblob
script.)The Debian distribution includes one firmware package,
firmware-linux-free
; this contains only firmware for which source code is available. The non-free repositories also contain a number of firmware packages built fromfirmware-nonfree
, but these aren't part of the main distribution.