well.. openflow is pretty much dead, too inflexible, too slow. The whole control/user plane split is an attempt of the classical router vendors to keep their proprietary boxes. It adds complexity as it requires to synchronize the state of some controller with some data plane box.
P4 was a great idea, but there's not much hardware that supports it.
fd.io / vpp is an impressive stack for software-only routing. Like all SW-only solutions, it suffers from high power consumption and packet rate variability. At today's packet rates, you always have to ask 'how many CPU instructions / cycles are required to perform this or that function per packet'.
It's much simpler. In the EU, truckers have to do mandatory 45 min breaks after 4 1/2 hours of driving. With the latest truck generation, this is enough time to recharge to get through the rest of the shift. 400 kW charging is sufficient in this scenario. No wasteful expensive H2 or fancy battery swapping technology required.
IQ tests are a bit absurd if one looks at the changing definitions of intelligence over the past century.
Someone in the 1920s/30s would call the ability to solve equations or play chess well as signs of high intelligence. Not so long ago, translation of natural languages was considered a task requiring a good level of intelligence.
Each progress in AI changes the definition of intelligence as we realize that a machine finally able to do task X is not really as intelligent as we thought it had to be.
And today the AI/robotics industry struggles to build a machine that can perform the job of a room cleaner. Beating grand masters at chess was far easier.
I did once fly as a guest with a winch start, and yes it is something. The ascend is pretty steep and the acceleration is powerful. The pilot did not find good lift and we had to land shortly after. My stomach did not like his curving around looking for lift, so I wasn't too unhappy about the short flight.
My late father was a maintenance technician for those things. He hated it when programmers did smart instruction placement to optimize drum timing. When the drum speed was a little off, they called him to calibrate it so their programs would run fast again.
I don't understand the difference to TCP here. If the path is not congested but the receiving endpoint is, the receiver can control the bandwidth by reducing the window size. Ultimately, it is always the sender that has to react to congestion by reducing the amount of traffic sent.
RPC is something of a red flag as well. RPCs will never behave like local procedure calls, so the abstraction will always leak (the pendulum of popularity keeps swinging back and forth between RPC and special purpose protocols every few years, though).
AFAIK, an ebpf function can only access memory it got handed as an argument or as result from a very limited number of kernel functions. Your function will not load if you don't have boundary checks. Fighting the ebpf validator is a bit like fighting Rust's borrow checker; annoying, at times it's too conservative and rejects perfectly correct code, but it will protect you from panics. Loops will only be accepted if the validator can prove they'll end in time; this means it can be a pain to make the validator to accept a loop. Also, ebpf is a processor-independent byte code, so vectorizing code is not possible (unless the byte code interpreter itself does it).
Given all its restrictions, I doubt something complex like a graphics driver would be possible. But then, I know nothing about graphics driver programming.
The fun really starts if you have a CPU using big endian and a bus using little endian..
Back in the late 1990s, we moved from Motorola 68k / sbus to Power/PCI. To make the transition easy, we kept using big endian for the CPU. However, all available networking chips only supported PCI / little endian at this point. For DMA descriptor addresses and chip registers, one had to remember to use little endian.
For high-speed networking, exokernel concepts are now being used in the form of DPDK (user space) and eBPF/XDP (user code dynamically verified and loaded into kernel space). Exokernels aimed to move kernel functionalities not into a bunch of separate processes like microkernels, but into libraries. In the late 1990s, I worked on such a system which unfortunately fell victim to the dotcom crash.
I was thinking of things like Box, Rc, Arc, Cell, Refcell. Then there is also the macro language, which integrates Scheme concepts. Like C++, it is a huge language, with extra wrinkles for every new corner case. Again, maybe this all is unavoidable if one wants to have zero cost abstractions. Hopefully, language designers will learn from Rust and come up with something more elegant.
lifetimes, async, the myriads of pointer types, that poor-person's monad '?' for a single type..
Sure, you need to give the compiler a lot of hints to achieve what Rust is doing, but it does not look pretty or elegant.