If I were to name one thing that makes modern programming languages great, I'd pick dynamic memory allocator (often interfaced via malloc/free functions). Imagine yourself keeping track of memory allocations, drowning in seemingly random addresses, and handling the fragmentation manually... Madness to say, at least.
In this article, dive into the existing Epiphany kernel module, break it into parts and investigate its functions. Analyzing a few thousands of lines of code is not that exciting, so we are going to pretend the driver doesn't exist and write it from scratch. The empirical approach will help us understand the Kernel <-> Epiphany communication better, and that will become crucial for the project we'll implement at the end of the series.