Skip to content
View pothos's full-sized avatar
🌴
On vacation
🌴
On vacation

Organizations

@ANLAB-KAIST @kinvolk @flatcar @uapi-group
Block or Report

Block or report pothos

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Please don't include any personal information such as legal names or email addresses. Maximum 100 characters, markdown supported. This note will be visible to only you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
pothos/README.md

About me

I'm a software developer at Microsoft Azure through the Kinvolk acquisition, working on Flatcar Container Linux since it got readied as replacement for CoreOS Container Linux. The work covers a broad range from the high-level build system architecture down to developing the low-level software components and collaborating with various upstream projects (Linux kernel, systemd, etc). I also worked on Lokomotive, Inspektor Gadget, and traceloop.

As a fun interview task at Kinvolk I implemented the idea of a systemd option to define BPF programs as packet filters for all network sockets of a CGroup. This is now part of systemd since version 243 and lets you use a custom network filter for your systemd service. Try out the examples in my bpf-cgroup-filter repo, and read the first and second blog post.

I did my dual degree Master in computer science at TU Berlin and KAIST (South Korea), where I was part of Prof. Sue Moon's Advanced Networking Lab. I did my Bachelor in computer science at FU Berlin. I'm part of the German association Forum Computer Scientists for Peace and Social Responsibility, where Joseph Weizenbaum was a founding member (I recommend you to watch some of his interviews or the documentary »Plug & Pray«).

My Master's thesis was about memory-safe userspace networking to protect against security vulnerabilities in the OS kernel's TCP/IP network stack due to memory corruption bugs. The solution consists of usnetd a memory-safe L4 switch to share a NIC between multiple userspace network stacks and the kernel's network stack, and usnet_sockets a Rust userspace networking library based on smoltcp that is still able to integrate with the loopback device. It offers various options on direct or shared NIC access. It uses my usnet_devices library for netmap, macvtap, and UNIX domain sockets smoltcp interfaces.

In my spare time I maintain GNOME Disks and implemented filesystem resize, check, and repair support for it in a GSoC project. This made me also work on udisks and libblockdev. Please reach out if you want to improve GNOME Disks. I still have a long todo list even though I don't find the time to write new code.

I like compilers and compression, and even more if both are combined. My Bachelor's thesis was about a compiler for a subset of Python to ZPAQL bytecode. ZPAQ is a compression format which embeds the decompression bytecode in the archive, allowing to change the algorithm without requiring the decoder to be updated. This idea addressed the incompatibility problem that all the versions of PAQ compressors had, and also allowed to choose different algorithms depending on the type of input data. However, ZPAQL wasn't used by many people because it is an assembly-like language. With a Python-like language to compile from I wanted to lower this barrier to write custom compression algorithms and also prove that the format can embed non-context modeling algorithms like Brotli (which I ported to Python from a Rust implementation). Custom algorithms are useful because the key element in data compression is prediction of future data which works best when the current context is taken into account. E.g., with ZPAQ it was easy to write a compression model for PNM image data that uses the color of the neighbor pixels to predict the next. The generated code is not the fastest because my malloc implementation isn't but it is a good playground for data compression. A fun exercise was to detect the decimal digits of Pi and then switch from a generic text compression model to perfectly predicting the next digits of Pi, essentially wasting almost no bytes on storing this seemingly random string it in a text despite it appearing like incompressible random data to any other compression algorithm.

In university I also worked on a Twee to Z-Code compiler with a tracing garbage collector. If you are into Arduinos you may find my library for Nintendo 64 controllers useful which you can try out playing a tetris port on your TV (or anything that displays the composite video signal the Arduino generates in software). I'll spare you my QBasic and Visual Basic code but if GitHub existed then, you would find it here ;)

I'm not actively writing on my blog but you can find my email address there, or create an issue in this readme repo to contact me.

My GNOME Account: gitlab.gnome.org/kailueke

Pinned

  1. ANLAB-KAIST/usnetd ANLAB-KAIST/usnetd Public

    Memory-safe L4 Switch for Userspace Network Stacks

    Rust 16 2

  2. ANLAB-KAIST/usnet_sockets ANLAB-KAIST/usnet_sockets Public

    Socket library for Rust using smoltcp as userspace network stack

    Rust 16 3

  3. smoltcp-rs/smoltcp smoltcp-rs/smoltcp Public

    a smol tcp/ip stack

    Rust 3.6k 399

  4. storaged-project/udisks storaged-project/udisks Public

    The UDisks project provides a daemon, tools and libraries to access and manipulate disks, storage devices and technologies.

    C 328 141

  5. bpf-cgroup-filter bpf-cgroup-filter Public

    Examples for cgroup socket ingress/egress BPF filters with systemd

    C 10 3

  6. zpaqlpy zpaqlpy Public

    Compiles a zpaqlpy source file (a Python-subset) to a ZPAQ configuration file for usage with zpaqd

    Rust 21 3