Skip to content

Process-independent interface to Linux system calls

Notifications You must be signed in to change notification settings

catern/rsyscall

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Summary

rsyscall is a library which provides a interface to an ever-growing subset of Linux system calls. This interface is:

  • process-independent: all system calls are called as methods on process objects, which can refer to the “local” process or to other processes under our control, possibly on remote hosts.
  • type-safe: many Linux API constraints, which are usually left to user code to enforce, are made explicit in the type system.
  • low-level: any action which is possible with the underlying Linux APIs, is possible with rsyscall; nothing is forbidden or discouraged.

For more detail on the concepts and motivation behind rsyscall, read the conceptual introduction.

Quick Start

Check out the docs at rsyscall.org.

Note that the rsyscall Python API uses some recent Python 3 features: async/await and type annotations. If you haven’t seen those before, skim the background tutorial first.

Installation

There’s no official release of rsyscall yet.

But, if you want to try it, you can do so with Nix:

git clone https://github.com/catern/rsyscall
cd rsyscall/python
nix-shell
python

Or you can build it by hand in a virtual environment:

git clone https://github.com/catern/rsyscall
cd rsyscall
python3 -m venv venv
. venv/bin/activate
pip install -U pip

cd c
autoreconf -fvi
./configure --prefix=$PWD/../venv
make install
cd ..
export LD_LIBRARY_PATH=$PWD/venv/lib
export PKG_CONFIG_PATH=$PWD/venv/lib/pkgconfig

pip install -e python/
python

Getting started

rsyscall is an async library that uses Trio, so the easiest way to try it out is with an async Python REPL. IPython provides a convenient REPL:

$ pip install ipython
$ ipython
In [1]: %autoawait trio

In [2]: import rsyscall

In [3]: t = await rsyscall.local_process.fork()

In [4]: await t.stdout.write(await t.ptr("Hello world!\n"))
Hello world!

Discussion

irc://irc.oftc.net/#rsyscall