Very nice article Ekaitz!
I wish you wrote it years ago when I had to understand these stuff for Jehanne!
Some time ago I was wondering about a malloc-less OS and the only real use case you cannot turn into static allocation of BSS or into messages over (bidirectional and random-access pipes) are the ones related to graphics.
The ultimate reason is that screen size might vary.
So I was wondering: what if ELF executable would have provided several BSS sizes and the loader was able to pick the right one?
ELF is pretty modular and flexible: how would you do that?
The best I was able to conceive is an additional LOAD segment with an additional entry point to run whose return value would compute the BSS space required.
So that it could check the execution environment and decide how much memory it would need.
The cons was that you couldn't fork or exec while running this function.
Can you see a better approach?