About C. How many percent of the freebsd kernel is written in C. And why ? Offcourse nobody is 100% perfect.
Given the size of the freebsd-doc repository, which qualifies as both code as well as FreeBSD kernel, in comparization to the size of the sys subdirectory of the freebsd-src repository, which is where the C sources of the kernel reside, it is safe to assume that our kernel is mostly written in html these days
That said, the amount of "actual" C "written" content is both debatable and difficult to measure. On one side, C allows for multiple statements in a single line of code, allowing C code to have a higher entropy (content density) then code written in languages that don't allow it, therefore the amount of C written code is higher then the lines of code might suggest. While our coding style states that multi-statement lines SHOULD be avoided, it's highly common nevertheless, especially in the historic parts of the code. There also is C code, either in pure form or as templates, within other languages' source files, that will be used to generate actual C code at compile time, which will then be fed to the C compiler. C code that is part of some cat<EOF games in a shell script basically is C code, even if it's in a shell script, and that could be argued to allow the amount of C content in the kernel to be considered higher then the line/byte/whatever ratio of the C file content to the whole repository.
In FreeBSD, the foreign language subcode is kind of neglectible when considering the amount of C code found in bison or perl scripts or the likes, however it's quite an thing the other way around: We have lots of C files containing inline assembler and array (or inline assembly ".byte") encoded opcode blobs that are not C even if though they are part of a C source file. Instrinctins kind of are C but at the same time kind of are not C, because while we _could_ provide a C written implementation there transparently, we don't, so instrinctins are just another way to encode assembler code inside C sources, and this can be argued to degrade the amount of C written content in the kernel.
Then, there is C inheritage considerations. A string constant in a source file isn't real C, and it could be anywhere else, too... probably it would be better off being elsewhere anyway. But string handling is such a particular weakness of C that frameworks and conventions were designed to (partially) overcome this weakness, and these frameworks have spread far beyond the C source code: If you rewrite the
printf(1) command line tool in rust, go or javascript, you are basically writing a C application, even if you don't write a single line of C, as the whole purpose of that application is to conform to C.