diff --git a/_posts/2019-08-03-release-v0-3-6.md b/_posts/2019-08-03-release-v0-3-6.md new file mode 100644 index 0000000..7d33341 --- /dev/null +++ b/_posts/2019-08-03-release-v0-3-6.md @@ -0,0 +1,114 @@ +--- +layout: post +title: "Version 0.3.6" +date: 2019-08-03 08:00:00 -0000 +author: Neil Alexander +--- + +### Version 0.3.6 + +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.md). + +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. + +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.md) 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). diff --git a/changelog.md b/changelog.md index 5894598..3143d4d 100644 --- a/changelog.md +++ b/changelog.md @@ -25,6 +25,39 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - in case of vulnerabilities. --> +## [0.3.6] - 2019-08-03 +### Added +- Yggdrasil now has a public API with interfaces such as `yggdrasil.ConnDialer`, `yggdrasil.ConnListener` and `yggdrasil.Conn` for using Yggdrasil as a transport directly within applications +- Session gatekeeper functions, part of the API, which can be used to control whether to allow or reject incoming or outgoing sessions dynamically (compared to the previous fixed whitelist/blacklist approach) +- Support for logging to files or syslog (where supported) +- Platform defaults now include the ability to set sane defaults for multicast interfaces + +### Changed +- Following a massive refactoring exercise, Yggdrasil's codebase has now been broken out into modules +- Core node functionality in the `yggdrasil` package with a public API + - This allows Yggdrasil to be integrated directly into other applications and used as a transport + - IP-specific code has now been moved out of the core `yggdrasil` package, making Yggdrasil effectively protocol-agnostic +- Multicast peer discovery functionality is now in the `multicast` package +- Admin socket functionality is now in the `admin` package and uses the Yggdrasil public API +- TUN/TAP, ICMPv6 and all IP-specific functionality is now in the `tuntap` package +- `PPROF` debug output is now sent to `stderr` instead of `stdout` +- Node IPv6 addresses on macOS are now configured as `secured` +- Upstream dependency references have been updated, which includes a number of fixes in the Water library + +### Fixed +- Multicast discovery is no longer disabled if the nominated interfaces aren't available on the system yet, e.g. during boot +- Multicast interfaces are now re-evaluated more frequently so that Yggdrasil doesn't need to be restarted to use interfaces that have become available since startup +- Admin socket error cases are now handled better +- Various fixes in the TUN/TAP module, particularly surrounding Windows platform support +- Invalid keys will now cause the node to fail to start, rather than starting but silently not working as before +- Session MTUs are now always calculated correctly, in some cases they were incorrectly defaulting to 1280 before +- Multiple searches now don't take place for a single connection +- Concurrency bugs fixed +- Fixed a number of bugs in the ICMPv6 neighbor solicitation in the TUN/TAP code +- A case where peers weren't always added correctly if one or more peers were unreachable has been fixed +- Searches which include the local node are now handled correctly +- Lots of small bug tweaks and clean-ups throughout the codebase + ## [0.3.5] - 2019-03-13 ### Fixed - The `AllowedEncryptionPublicKeys` option has now been fixed to handle incoming connections properly and no longer blocks outgoing connections (this was broken in v0.3.4)