diff --git a/_posts/2020-02-21-release-v0-3-13.md b/_posts/2020-02-21-release-v0-3-13.md new file mode 100644 index 0000000..623a808 --- /dev/null +++ b/_posts/2020-02-21-release-v0-3-13.md @@ -0,0 +1,121 @@ +--- +layout: post +title: "Release v0.3.11" +date: 2020-02-21 09:00:00 +0000 +author: Neil Alexander +--- + +### Release time! + +Our last Yggdrasil release, v0.3.12, was merged a couple of months ago at the +end of November. For the most part we have seen good stability with the v0.3.12 +builds, not to mention good adoption (with the crawler showing over 500 nodes +running it). Today we are releasing our next version, v0.3.13. + +Many of our releases tend not to warrant blog post entries, especially given +that the changelog documents the changes. However, there's some fairly big news +points associated with this version therefore this post aims to discuss them in +a bit more detail. + +#### TUN adapter changes + +The first big talking point is that this is the first Yggdrasil release that +departs entirely from the Water library and replaces it with the Wireguard TUN +library. There are a few reasons why we decided to switch from Water to the +Wireguard library, but one of the most prominent is that it gives us better TUN +support across all platforms and allows us to finally remove TAP support +altogether. + +At a high-level, TUN interfaces are effectively emulating "Layer 3" interfaces - +they deal only in IP packets - whereas TAP interfaces are emulating "Layer 2" +full-fat Ethernet interfaces. + +To run in TAP mode, Yggdrasil not only had to add and remove Ethernet headers +for each packet, but it also has to implement an entire NDP implementation and +track MAC addresses in order to trick the host operating system into believing +that there was a real Ethernet domain on the other end of the adapter. Needless +to say, the amount of boilerplate code in order to make TAP mode work correctly +was significant and much of that code was very fragile. + +Although we implemented NDP, we did not ever get around to implementing ARP, +which also meant that sending tunnel-routed IPv4 traffic over TAP interfaces +invariably did not work either. We have now been able to remove much of this +code and simplify the TUN code massively, closing the gaps between some of our +supported platforms. + +There is one platform that is negatively impacted by this change and that's +NetBSD. The Wireguard TUN package that we are using currently has **no support +for NetBSD**, so we are also removing NetBSD as a supported target until the +necessary code appears upstream. To our knowledge, we don't have a base of +NetBSD users anyway, but we will aim to re-add this soon. + +The `IfTAPMode` configuration option has now been removed from Yggdrasil +entirely and it will be ignored if specified. **If you are using TAP mode today, +then this will affect you**. Please make sure to check your Yggdrasil +configuration since this may result in interface naming changes and you may have +to update network settings in your host operating system. + +Initially we added TAP support into Yggdrasil as it was the only way to support +Windows, since the OpenVPN driver that we used at the time only supported TAP +mode. Thankfully, this is no longer a problem, as the Wireguard project have +also released [Wintun](https://wintun.net), which is supported by the Wireguard +TUN library. The net result is that we gain TUN support on Windows and the +performance is *far* better than the buggy OpenVPN driver, which is a nice segue +into... + +#### Windows installer and performance + +We have spent a lot of time trying to improve the installation and setup +experience on Windows. This mostly falls into two areas. + +The first is that using the Wintun driver has *massively* improved performance, +in some cases by hundreds of MB/s, and starting the Yggdrasil process is now +much more reliable too - it should no longer be necessary to restart Yggdrasil +due to cases of the TAP adapter not being set up or configured correctly. + +The second is that we now automatically generate Windows `.msi` installers using +Appveyor, which means that installing or upgrading Yggdrasil is now simpler than +ever. It is no longer necessary to create directories, copy files and register +Windows services by hand - a marked improvement! + +The installer also bundles the Wintun driver and it is installed automatically +if required, therefore there is no longer a need to hunt down and install the +OpenVPN TAP driver separately. We hope that these changes will help to encourage +adoption of Yggdrasil on Windows platforms by significantly reducing the barrier +to entry. + +As in the previous section, Yggdrasil on Windows has gone from supporting TAP +mode only to now supporting TUN mode only. **This may mean that you need to +review your configuration**. If you no longer need the OpenVPN TAP driver on +your system, it is best to entirely uninstall it. It is also important to make +sure that the `IfName` configuration option in your `yggdrasil.conf` does not +specify the same name as an existing OpenVPN TAP interface or Yggdrasil may fail +to start. + +#### End of the v0.3 release cycle + +Generally we try, where possible, to avoid make any changes which would damage +backward compatibility with previous versions. The last version that had +breaking changes was v0.2.1 - over a year and a half ago. However, maintaining +backward compatibility so tightly also prevents us from improving the Yggdrasil +design in various ways. + +Therefore, unless any serious bugs or security vulnerabilities appear, it is +very likely that this version will be the last in the v0.3 release cycle. +Instead, we will start working on the v0.4 release, which is likely to include a +number of breaking protocol changes and will be incompatible with v0.3 releases +as a result. + +More information will be announced on the types of changes in v0.4 as they +happen - expect to see more blog posts and chatter in the Matrix channel on this +subject - but we will aim to give as much notice as possible before releases +occur that contain breaking changes. + +#### Final mentions + +In addition to the release notes above, I'd like to relay the message that +[@mwarning](https://github.com/mwarning) has a proposal open for a Google Summer +of Code (GSoC) project under the Freifunk umbrella, comparing a number of mesh +routing protocols including Yggdrasil. More information about the proposal is +available [here](https://projects.freifunk.net/#/projects?project=freifunk_meshnet_protocol_evaluation&lang=en). +If you are interested, please reach out! diff --git a/index.md b/index.md index 9a82b36..d8c06e7 100644 --- a/index.md +++ b/index.md @@ -21,7 +21,7 @@ Binaries are [automatically built](https://circleci.com/gh/yggdrasil-network/ygg ## Implementation -Yggdrasil is written in Go. The codebase is fairly small and easy to navigate. It has been tested on a number of platforms (including [Linux](platform-linux.md), [Windows](platform-windows.md), [macOS](platform-macos.md), NetBSD, FreeBSD, OpenBSD and [Ubiquiti EdgeOS](platform-edgerouter.md)) although with various minor caveats. See the [Platforms](platforms.md) page for more information. +Yggdrasil is written in Go. The codebase is fairly small and easy to navigate. It has been tested on a number of platforms (including [Linux](platform-linux.md), [Windows](platform-windows.md), [macOS](platform-macos.md), FreeBSD, OpenBSD and [Ubiquiti EdgeOS](platform-edgerouter.md)) although with various minor caveats. See the [Platforms](platforms.md) page for more information. ## Get Involved