Here’s a download link if anybody is interested:
Here’s a download link if anybody is interested:
As a teenager I had heard about BeOS and I tried it out. I must have gotten it from a magazine's CD.
And by mistake, clicking around, I opened all of my mp3 collection's files at the same time. Each of the mp3s opened in their own little player window - and they all started playing at the same time, without the UI starting to lag at all.
It gave me an appreciation of what a computer can do
Oh well.
For more than 10 years, Linux with the PREEMPT_RT patch has been capable of more-or-less hard real time, with latencies in the 10's of usecs range. That can be thwarted, however, by a variety of hardware features (SMI being the worst offender, plus devices that hog the PCI bus for too long), so you are not guaranteed this performance just by running that kernel.
Also known as soft realtime.
For hard realtime, you need guarantees. Linux is too complex and cannot possibly offer them; this is the territory of formal proof, with complexity growing exponentially with code size.
Look at seL4 for hard realtime.
Fortunately, for realtime audio, you don't need hard realtime unless you're very close to overloading the CPUs. Soft realtime (i.e. 99% of all interrupts handled within N usecs, 100% handled with N*2) is good enough.
AFAIK Linux RT kernel is designed to hit every deadline, but they just cannot offer a formal proof.
So "more-or-less" hard real time.
Usually when you're entering that realm of such requirements, you're rarely talking about off-the-shelf devices.
And that's why it is soft realtime. No guarantee, no hard realtime. It really is that simple.
Linux is still Linux, and it is still fundamentally not capable of hard realtime.
The ability to compile a (close to) real-time kernel seems to be one difference between Linux and BSD not often discussed.
The Arch Linux wiki has some description of their real time patches:
These kinds of tradeoffs don't make sense for a lot of common Linux workloads, which is why it isn't the default.