2021-02-25 01:45

Wie viele Codezeilen hat Wireguard?

In meinem gestrigen Vortrag über VPNs mit Wireguard im Rahmen des Freien Software Abends Köln/Düsseldorf hatte ich zitiert, dass Wireguard nur einen Codeumfang von 3.800 Zeilen hat, im Vergleich zu den ca. 400.000 von Strongswan und 600.000 von OpenVPN.

Diese Zahl hatte ich bei der Vorbereitung meines ersten Wireguard-Vortrags als Zitat aus einer Quelle im Internet übernommen, die ich jedoch auf Rückfrage nicht mehr benennen konnte.

Sucht man mit Google nach dem Suchbegriff “wireguard lines of code”, enthält die Vorschau zum ersten Treffer diese Zahl; der verlinkte Artikel nennt sie jedoch nicht mehr. Die Treffer zwei bis vier sprechen jeweils von ca. 4.000 Zeilen. Der Wikipedia-Artikel in Treffer drei gibt an, dass damit explizit der Code im Kernel gemeint ist.

Google-Suche nach “wireguard lines of code”

Aber schauen wir doch mal in die Quellen.

Wireguard wurde in Linux 5.6 erstmals als Bestandteil des Kernels veröffentlicht. Hier ist die C-Implementierung von Wireguard bereits 4.764 Zeilen groß. Mit Headern und Makefile sind es 5.453 Zeilen.

harald@moonrise:~/Downloads/linux-5.6/drivers/net/wireguard$ cloc .
      31 text files.
      31 unique files.                              
       0 files ignored.

github.com/AlDanial/cloc v 1.82  T=0.03 s (963.6 files/s, 216617.2 lines/s)
-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
C                               17            790            495           4764
C/C++ Header                    13            137             94            671
make                             1              0              0             18
-------------------------------------------------------------------------------
SUM:                            31            927            589           5453
-------------------------------------------------------------------------------

In der aktuellen Kernelversion 5.11.1 ist der Codeumfang nahezu gleich geblieben; er beträgt nun 5.444 Zeilen inclusive Header und Makefile.

Um Wireguard nutzen zu können, benötigt man neben dem Kerneltreiber auch die Tools wg und wg-quick. Sie kommen unter Debian/Ubuntu im Paket wireguard-tools. Der Sourcecode dazu liegt z.B auf GitHub im Repository wireguard-tools im Verzeichnis src. Hier ist die reine Implementierung in C 3.211 Zeilen lang, mit Headern und Buildsystem ergeben sich aber insgesamt 8.659 Zeilen. Der große Umfang ist u.a. der Tatsache geschuldet, dass das Repository die Tools für die Betriebssysteme Linux, OpenBSD, FreeBSD, MacOS, Windows und Android beinhaltet.

harald@moonrise:~/git/wireguard-tools/src (master)$ cloc .
      56 text files.
      56 unique files.                              
      13 files ignored.

github.com/AlDanial/cloc v 1.82  T=0.05 s (998.3 files/s, 208911.5 lines/s)
-----------------------------------------------------------------------------------
Language                         files          blank        comment           code
-----------------------------------------------------------------------------------
C/C++ Header                        20            429            318           3661
C                                   21            464            105           3211
Bourne Again Shell                   4            184             54           1625
make                                 2             22              6            112
Windows Resource File                1              5              4             31
XML                                  1              0              4             19
-----------------------------------------------------------------------------------
SUM:                                49           1104            491           8659
-----------------------------------------------------------------------------------

Insgesamt ergibt sich also ein Codeumfang der C Quelltexte von Kernel und Tools von 7.975 Zeilen, mit Headern sind es 12.307 Zeilen. Also durchaus einiges mehr als die ursprünglich zitierten 3.800 Zeilen, allerdings immer noch deutlich weniger als OpenVPN und Strongswan mit ihrem Codeumfang im sechsstelligen Bereich.