Offloading processing to storage is a means to minimize data movement and efficiently scale processing to match the increasing volume of stored data. In recent years, the rate at which data is transferred from storage has increased exponentially, while the rate at which data is transferred from memory to a host processor (CPU) has only increased linearly. This trend is expected to continue in the coming years. Soon, CPUs will not be able to keep up with the rate at which stored data is transferred. The increasing volume of stored data compound this problem. In the 90s, pioneering efforts to develop Active Disks were based on magnetic drives. Today, renewed efforts fall in two groups. The first group combines Open-Channel SSDs with a programmable storage controller integrated with a fabrics front-end. The second group integrates a programmable storage controller directly onto a SSD (e.g., Scale-Flux, NGD).We focus on the former approach. At its core, our approach is based on defining application-specific Flash Translation Layers (FTLs) on storage controllers as a means to offload processing from the host. Our goal is to leverage computational storage as a means to collapse layers within the I/O stack. In this thesis, we make three contributions. First, we explore the performance characteristics of Open-Channel SSDs. Second, we introduce OX as an FTL template for programming SoCbased storage controllers on top of Open-Channel SSDs. Third, we present ELEOS, a log-based storage engine based on OX to offload storage management from the host. We evaluate ELEOS together with the LLAMA system, developed at Microsoft Research.