5
0
mirror of https://github.com/cwinfo/yggdrasil-network.github.io.git synced 2024-09-19 21:52:31 +00:00
yggdrasil-network.github.io/_posts/2019-08-03-release-v0-3-6.md
2019-08-04 12:30:56 -05:00

115 lines
5.6 KiB
Markdown

---
layout: post
title: "Version 0.3.6"
date: 2019-08-03 08:00:00 -0000
author: Neil Alexander
---
### New release!
It's been nearly five months since we released version 0.3.5 of Yggdrasil. In
that time we've seen the node count rise to over 400 nodes on the public network
at times (over 80% of which are running the latest released version) and we've
gained valuable insight to the kinds of challenges that our users have. We've
worked to fix a number of bugs and to improve Yggdrasil.
In terms of lines of code changed, version 0.3.6 is the biggest release of
Yggdrasil to date, with several thousands of lines of code affected. It
represents a massive refactoring exercise in which we've broken up and
modularised the code, dividing core Yggdrasil functionality, TUN/TAP, admin
socket and multicast features into their own respective Go packages.
### Fixes
Most of the user-facing changes in this release are fairly minimal, however some
bugs have been corrected. A complete list is available in the [changelog](/changelog.html).
Highlights include peers now being added correctly even when one or more
configured peers are unavailable or unreachable. Multicast interfaces are also
being evaluated more frequently now, which can help if an interface becomes
available or goes down after Yggdrasil has already started.
A number of bugs have been fixed in the TUN/TAP and IP-specific code, including
problems that affected ICMPv6 and Neighbour Discovery in TAP mode specifically.
This helps reliability on platforms where TAP mode is used more commonly, e.g.
on BSD platforms or on Windows, although this also improves TAP support on Linux
too.
### Refactoring and API
Around the previous release, it became obvious to us that our codebase was
turning into a monolith. We had pretty much all of the necessary behaviour in
a single `yggdrasil` package to run a single node, but this made our codebase
inflexible and difficult to maintain and extend. It also meant that Yggdrasil
was virtually impossible to integrate into other applications.
Our refactoring efforts in version 0.3.6 mean that our codebase is now easier to
manage and to understand. It also includes the first taste of our API! The
API makes it possible to take the Yggdrasil core, drop it into your own Go
application and use the Yggdrasil network as a fully end-to-end encrypted and
distributed transport layer. We've also moved all of the IP-specific code into
the TUN/TAP module, which means that Yggdrasil's core now provides a completely
protocol-agnostic transport.
Documentation on how to use the API to integrate Yggdrasil into your own
applications will follow soon—watch this space! In the meantime, [`godoc` can be
used to examine our new API functions](https://godoc.org/github.com/yggdrasil-network/yggdrasil-go/src/yggdrasil).
Please note though that **API functions are not yet finalised and may be subject
to change** in future versions. Yggdrasil is still alpha-grade software at this
point so all of the usual warnings apply.
### Platform Support
We enjoy great support from our community in bringing and packaging Yggdrasil on
new platforms. Since the release of version 0.3.5, the following third-party
packages have cropped up, and we are very grateful to the maintainers:
- A [new RPM build](https://copr.fedorainfracloud.org/coprs/leisteth/yggdrasil/) for Red Hat, Fedora, CentOS etc.
- An [AUR package](https://aur.archlinux.org/packages/yggdrasil-git/) for Arch Linux
- A [Void package](https://github.com/void-linux/void-packages/tree/master/srcpkgs/yggdrasil) for Void Linux
- A [MacPorts package](https://github.com/macports/macports-ports/blob/master/net/yggdrasil-go/Portfile) for macOS
We expect that any third-party packages which have not yet been updated for
v0.3.6 will be updated soon!
We are aware of a few outstanding issues with Windows, which are largely related
to one or two bugs in the [Water](https://github.com/songgao/water) library
which we use for TUN/TAP support. We are hoping to address these problems with
the maintainer of this library soon. Using Yggdrasil in router-only mode does
work as expected, but some bugs when using the TAP adapter still remain. In the
meantime, we'd certainly welcome any assistance in maintaining the Windows port
of Yggdrasil.
The iOS build has been largely neglected due to API changes, although hopefully
a new TestFlight build for version 0.3.6 will be available before too long.
### Upgrading
We recommend that all Yggdrasil users always run the latest version of the code
wherever possible, so please upgrade as soon as it is convenient. New downloads
are available from our [Builds](/builds.html) page and
[Neil](https://github.com/neilalexander)'s S3 repositories are up-to-date for
Debian and EdgeRouter installs.
If you have installed through a package manager, you should be able to upgrade
in-place as soon as the new packages are available. On macOS, you can simply
install the new `.pkg` from the builds page over the top of the old one. On
Windows, and on any installation where the binary was installed by hand, you can
simply replace the `yggdrasil` and `yggdrasilctl` binaries with the newly
released builds.
Building from source is simple if you have Git and Go 1.11 or later installed:
```
git clone https://github.com/yggdrasil-network/yggdrasil-go
cd yggdrasil-go
./build
```
### Feedback
We always welcome feedback, so please do feel free to join us either in our
[Matrix channel](https://riot.im/app/#/room/%23yggdrasil:matrix.org) or on IRC
in `#yggdrasil` on Freenode. You can also raise bug reports and issues in [our
GitHub repository](https://github.com/yggdrasil-network/yggdrasil-go/issues).