Amaan Cheval, WebAssembly Developer in Bengaluru, Karnataka, India
Amaan Cheval

WebAssembly Developer in Bengaluru, Karnataka, India

Member since August 8, 2019
Amaan is an ardent advocate of open-source and is the maintainer for the x86-64 BSP for RTEMS, an open-source real-time operating system used in space missions, including on NASA's Parker Solar Probe. He has also worked on an Intel x86 emulator that runs in the browser, sped up by a custom-made JIT compiler. He loves challenging problems, ranging from kernels and compilers to distributed systems, cryptography, and reverse engineering.
Amaan is now available for hire

Portfolio

Experience

Location

Bengaluru, Karnataka, India

Availability

Part-time

Preferred Environment

Linux, Emacs, Git

The most amazing...

...code I've written was to port a UEFI bootloader from FreeBSD's kernel, and adapt it to RTEMS so that RTEMS could load ELF kernels regardless of UEFI/BIOS.

Employment

  • Maintainer of x86-64 BSP

    2018 - PRESENT
    RTEMS (Open-source Organization)
    • Made upstream patches to GCC so it would correctly include C runtime files (i.e. the ones that call the "main" function) for RTEMS x86-64 target binaries, and would allow for custom GCC spec options (such as -qrtems, which link the standard RTEMS libraries into a program).
    • Evaluated how UEFI support functioned on various operating systems, including FreeBSD and Arch Linux, discussing the pros and cons of every approach with the open-source community, and finally porting FreeBSD's UEFI bootloader to RTEMS after unanimous agreement.
    • Developed code to calibrate Intel x86-64's dynamic APIC timer by using the PIT (which runs at a fixed frequency). Since RTEMS is an RTOS, timing is of critical importance, and this step determines how task-scheduling and context-switching are handled by the kernel.
    • Implemented all the code required by the RTEMS kernel to initialize contexts, and switch contexts (for pre-emptive context switching schemes), by perfectly storing and restoring all machine state (i.e. hardware registers, flags, etc.).
    • Built a system for the RTEMS kernel to be able to hook into the microprocessor's interrupts, and to correctly fire user-subscribed tasks upon said interrupts (for eg. in a space mission, it might be "calculate the recalibration needed by the thrusters every time the sensors detect movement" - the sensors may be attached to a hardware interrupt, which the kernel will handle, and schedule the user's task for).
    • Implemented a polling console driver to allow the RTEMS kernel to log messages to a console over UART.
    • Mentored students for Google's Code-In and Google's Summer of Code, helping them familiarize themselves with RTEMS, debug issues, and giving them feedback and guidance on their projects.
    Technologies: C, Assembly
  • Systems Programmer

    2017 - 2019
    Droplet Computing
    • Helped develop an Intel x86 emulator which runs in browsers or Node.js environments by compiling source code to WebAssembly, in a small team where every member was always responsible for many components.
    • Created a method of automatically generating randomized, deterministic tests for most machine instructions supported by the emulator. Test fixtures were generated by running the tests on an oracle (such as QEMU or GDB for Intel x86 hosts), and then compared with the actual results of running through our emulator, in real-mode.
    • Sped up the generation of test fixtures from taking 3 mins, down to a solid 15 seconds, for hundreds of automatic tests, by parallelizing the process and reducing state setup and teardown.
    • Implemented various techniques of detecting hot-code basic blocks in the guest OS and compiling them Just-In-Time to WebAssembly, thereby allowing the emulator to be sped up by directly executing the guest OS's instructions, without having to read from emulated memory and having to reinterpret instructions, supporting a dynamic system for invalidating cached blocks efficiently as well.
    • Helped build the networking stack bridge required between guest-to-host interactions, to allow the guest's networking events, such as sending physical Ethernet frames, to be correctly unwrapped into TCP/UDP packets the host OS could actually send/receive, and then repackaging the host's network response into a physical frame for the guest OS.
    • Built a custom instrumentation profiler for the emulator, to be able to dynamically examine and find bottlenecks in the application.
    • Implemented most of the emulation code for a hardware Floating Point Unit (FPU), MMX, and SSE instructions, enabling more modern applications such as Microsoft Word and Wine to function correctly in the emulator.
    • Experimented with methods of symbolic execution using KLEE to automatically increase code coverage across the project. Measuring code coverage also required extending LLVM intrinsics due to our compiler-chain targeting WebAssembly.
    Technologies: Rust, C, WebAssembly, Assembly, JavaScript, OCaml, Docker, KLEE
  • Developer Success Engineer

    2016 - 2017
    Auth0
    • Developed a custom application that would act as a SAML Identity Provider for any client, and would allow sending back intentionally malformed SAML Responses. This application proved very useful when debugging issues customers had in integrating their systems with Auth0's SAML systems.
    • Provided support to customers using a variety of technologies, regardless of familiarity with said technologies, by asking relevant questions and knowing how to gather the relevant HTTP requests in different environments (i.e. capturing HAR files and analyzing those).
    • Guided customers as an expert on various authorization protocols, including OAuth, OpenID Connect, SAML, and WS-Fed, and help customers architect their applications securely.
    • Created both internal and external documentation on specific technical topics related to authorization, thereby reducing my own bus factor.
    • Volunteered as a "concierge" to answer any questions the rest of the company had about the authorization pipeline, its features, its security guarantees, recommended methods of use, etc. This allowed engineering teams to focus more on creating features instead of explaining them.
    Technologies: JavaScript, Python, Go
  • HTML5 Game Developer

    2010 - 2011
    CodeHeads
    • Ported various Flash / ActionScript based games to HTML5 so they would work in web browsers on mobile devices too.
    • Developed several 2D platformer games, puzzle games, and action games for various online gaming portals.
    • Created a custom game framework for common elements of game development such as sprite management, media management, UI and screen elements, pub/sub event management, etc.
    Technologies: JavaScript, Canvas, HTML5, CSS3, SVG

Experience

  • Phone to Chrome (Development)
    https://play.google.com/store/apps/details?id=com.amaan.phonetochrome&hl=en_IN

    Phone to Chrome is an Android app and Chrome extension that users can install to easily share links from their mobile devices to have them magically open in Chrome on their desktops.

    The app has had over 50,000 downloads and has been very well-received in general.

  • Music Recommender System (Development)
    https://github.com/AmaanC/music-recommender

    A proof-of-concept application written in Python that uses cosine similarity on LastFM's vast database of user preferences in music to recommend bands to new users based on their tastes.

  • Pizza Delivery Bot (Development)

    We used an ATMEGA 2560 microcontroller to build a "pizza delivery" bot. The pizzas were colored thermocol boxes of different sizes, and the bot had to recognize them, pick them up, and deliver them to houses marked out on a flexsheet in optimal time.

    I lead the team and wrote most of the code that ran on the microcontroller, while other members of the team took care of assembling the bot's hardware.

Skills

  • Languages

    Rust, JavaScript, C, Assembly, Embedded C, NASM, Python, Lisp, Agda, R
  • Tools

    Emacs, VirtualBox, VMware, Nginx, GDB, Kibana
  • Platforms

    Linux, Arch Linux, AVR, Quick EMUlator (QEMU), Android, Docker, Arduino
  • Storage

    PostgreSQL, MongoDB
  • Frameworks

    Express.js, Cordova, Flask, Svelte, Mocha.js
  • Paradigms

    Continuous Integration (CI), Continuous Deployment, Agile, Functional Programming, DevOps
  • Other

    Reverse Engineering, Chrome Extensions, WebAssembly, LLVM, ARM Embedded

Education

  • Bachelor's degree in Computer Science
    2014 - 2018
    Mumbai University - Mumbai, India

To view more profiles

Join Toptal
I really like this profile
Share it with others