CLIENT WORK
Clients have been hiring me to help them with the following: reverse-engineering both ELF and PE binaries; writing performance-critical programs for desktop computers and microcontrollers alike; designing custom PCBs (experience with up to 8 layers), including ones carrying these ICs: STM32s, various BGA/QFP FPGAs, crypto modules, SRAM and NAND flash, frequency synthesizers, and power regulators; writing client-server APIs with authentication and rate-limiting; assisting in setting up their GNU/Linux machines and debugging various system-level issues; and security-hardening GNU/Linux systems.
OVERVIEW
I am an inquisitive software and hardware developer. My areas of interest, as of now, are custom hardware design, signal processing, professional audio, radio, electromagnetics, and aircraft control and navigation systems design. I love learning how things that I'm interested in work and then building them my own way, with my own rules. The non-client work that I do is always guided by this principle.
My current experience lies in these domains: systems and hardware engineering; OS development; and setup, management, maintenance, and defense of GNU/Linux servers. My primary language is C (C99 for portability) for most code. For the most safety-critical applications, such as flight computers, navigation or radar systems, or radios, I use Ada (SPARK).
HARDWARE
For hardware design, when it comes to HDL, I use SystemVerilog, together with a board's native toolchain. Thus far, I've been working with Vivado and Quartus, then yosys and nextpnr for open boards.
When it comes to PCBs, I use Altium (switched from KiCad) and PCB Toolkit in tandem, and am aiming to start using ANSYS soon.
SIDE PROJECTS
One of my current passion projects is a from-scratch compute platform (from the logic gates and PCB, through the bootloader, to userspace) that, on the software side, defines a non-POSIX kernel with userspace above it (the software side also works on the i386 and the AMD64) that I am writing in C99 in my free time.
On the hardware side, the operating system is deployed across a set of four FPGAs, each using my custom 16-instruction processor architecture, which I call the "Minimal Instruction Set Computer," defined in Sail. The Sail architecture is used as a reference for the 32-bit processor, a.k.a. the "DANGLING Logic Unit," written in SystemVerilog. The individual FPGAs in the set have their specific roles. The master of the four is the "DANGLING Central Logic Unit." The DCLU has access to all of the three other units. Secure operations are handled by the "DANGLING Cryptographic Co-processor Unit." The DCCU is involved during each stage of the system's runtime. For expansion capability, there is the "DANGLING Peripheral Unit," whose role is interfacing with any external system that understands my custom serial protocol, EMIEMI. The idea of this compute platform started as a modular synthesizer, which means that audio is the centermost feature. Most resources go toward that stage. It is handled by the "DANGLING Sound Unit." Each processor has its own PSRAM, SDRAM, and NAND flash, except the DCCU, which is isolated to try to prevent leakage or intentional corruption of secure data. The DCCU is instead initialized by the DCLU and only communicates with and via the DCLU.
Simon S. earns an estimated $8.9k/mo. That's 6× the typical freelancer and more than 99.84% of everyone we track.
Beyond that, on the side, I am currently building a custom flight management computer for a custom aircraft configuration, which is a project that I interweave with the custom OS/CPU project described above.
GITHUB
An overview of my personal, non-client work items can be found on my GitHub profile.