Since its inception as an embedded operating system, Linux has been criticized for its lack of real-time capabilities. Linux and its scheduler were designed for maximum throughput not for deterministic response. The open-source kernel has enabled developers to offer real-time solutions for Linux.2 These solutions follow two approaches:
Proponents of the thread approach claim that no modifications to the Linux kernel will ever make it deterministic. The scheduler and preemptable kernel proponents maintain that their modifications are perfectly suitable for the vast majority of applications, thanks to today's high-performance processors. Both arguments have merit. Adopting either approach adds some complexity to your design, thus increasing the development time. Adopting a real-time solution may lock your design into a specific version of the kernel. You earned in Chapter 11, "Using Interrupts for Timing," that the stock Linux kernel has good average interrupt latencies good enough to develop an event timer with 1ms accuracy on all the Project Trailblazer target boards. You should seriously consider benchmarking your hardware as described in Chapter 11 before adopting a real-time solution.
Windowing and real-time solutions require interaction between hardware and software. These solutions don't exist for all CPU architectures or graphics hardware. Early in your design phase, you should ensure that software ports exist for your hardware. Also keep in mind that embedded Linux developers are definitely (sometimes fiercely) opinionated, particularly in the areas of windowing and real-time. Their opinions can be of a personal, technical, or business nature. If your design requires either windowing or real-time capabilities, you should thoroughly research and investigate all the options for software and hardware. Many windowing and real-time solutions have licensing requirements that could affect your decisions and the cost of your design.