diff --git a/README.md b/README.md
index 5627c6afaec6514d531533ec2ebd01bc9d3281d2..b1f492f265e663dcb55452a1739082a5178f1439 100644
--- a/README.md
+++ b/README.md
@@ -3,6 +3,32 @@ libglnx is the successor to libgsystem: https://git.gnome.org/browse/libgsystem
 It is for modules which depend on both GLib and Linux, intended to be
 used as a git submodule.
 
+Features:
+
+ - File APIs which use `openat()` like APIs, but also take a `GCancellable`
+   to support dynamic cancellation
+ - APIs also have a `GError` parameter
+ - High level "shutil", somewhat inspired by Python's
+ - A "console" API for tty output
+ - Some basic container utility functions
+ - A backport of the GLib cleanup macros for projects which can't yet take
+   a dependency on 2.40.
+
+Why?
+----
+
+There are multiple projects which have a hard dependency on Linux and
+GLib, such as NetworkManager, ostree, xdg-app, etc.  It makes sense
+for them to be able to share Linux-specific APIs.
+
+This module also contains some code taken from systemd, which has very
+high quality LGPLv2+ shared library code, but most of the internal
+shared library is private, and not namespaced.
+
+One could also compare this project to gnulib; the salient differences
+there are that at least some of this module is eventually destined for
+inclusion in GLib.
+
 Porting from libgsystem
 -----------------------