Thank God, it's (almost) 2021
Needless to say that 2020 has been a challenging year for everyone, even more challenging for some than others. Like many of you, 2020 took its toll on my general morale, and the stress level has been higher year-long than ever before. Things have been very frustrating at times. For instance, I am STILL trying to get a CPU to build myself a new workstation, which would greatly improve my firmware development workflow by significantly reducing compile times. Got every single parts, except for the CPU, which has been unavailable at all the Canadian retailers ever since its launch 6 weeks ago. However I consider myself to have been blessed by not only having a secure job, but actually having had a fairly good year professionally. For those who don't know, I run my own IT consulting/support business, providing various IT services to a number of small companies and non-profit organizations. A lot of my customers relied heavily on me this year to get them set up for remote work, and to provide direct technical supports to their employees who had to learn how to remotely access their work data, be it through VPNs, FTP, or other remote access technologies. So if there is one area I can be thankful for in 2020, it's the fact that my job is secure, and that I was able to help all of these customers to get through this difficult year.
Development throughout 2020
On the development side of things, 2020 has been a rollercoaster as well. The increasing chasm between the various code branches used by different router models have made my work very challenging at times. At one point I had to maintain three separate codebases at the same time, and not two models were based on the same GPL content (I had to maintain a Google chart just to keep track of the whole thing!). As this was getting increasingly unsustainable for a one-man project, I decided to drop the older models (that had their own separate code branch), and to take a pause until at least Asus could get the AX model code reunified with all the AC models. This is finally happening with the move to the 386 codebase.
A lot of discussions occurred as well between Asus and I, as they wanted to see what they could do to help make my job easier. A lot of good things came out of these discussions, with for instance a promise to be more active in providing me with the necessary GPL archives that I need for every single model. We also discussed a number of other things that could help me, for instance they wanted to know what they could do help me start supporting some of their ROG models. We settled on a few things, and decided to give this a try, which led to experimental support for the GT-AC2900 coming up with the 386.1 release. After that, I will re-evaluate the possibility of adding more ROG models in the future, but it will depend on the final results of that experiment.
2020 was a very active year in terms of model support. While two models were dropped (the RT-AC87U and RT-AC3200, both of which are over 6 years old by now), four models were added (which must be a record, I believe my usual average is 1-2 model a year):
- RT-AX56U
- RT-AX58U
- RT-AX86U (currently in beta)
- GT-AC2900 (currently in beta, and an experiment)
The first three required me to add two whole new SDKs to the codebase, which is always very challenging. A typical new SDK can take me close to a whole month of work to add and debug. The fourth one involved Asus doing part of the work for me (for instance taking care of the webui portion), so it wasn't as much work for me. So in terms of support, Asuswrt-Merlin will soon support more models than it ever did before. If I can continue to get GPL releases that are all in sync, this should remain manageable. 2021 will tell.
While 2020 was mostly focused on adding new models and just trying to juggle with the scattered code base (and the last quarter of 2020 being devoted to the move to 386), early 2020 also saw some important changes, with the introduction of the new AddOn API, and the integration of
@thelonelycoder's AMTM into the firmware. While Asuswrt-Merlin already had a fairly active third party development community, this opened them the door to easily integrate with webui, and also made it easier for end-users to install these add-ons. While this was the only notable software addition in 2020, it's a pretty significant one.
Another major under-the-hood project of 2020 was rewriting almost the entire OpenVPN implementation. Originally, Asuswrt-Merlin's OpenVPN implementation was based on Tomato's implementation which I had ported to my firmware back in 2012 or 2013. The web interface was written from scratch by me, but under the hood it was largely Keith Moyer's modified code running. One problem was that code was tied to a non-GPL licence. Even though I had received the author's permission to use his code, I didn't feel comfortable with the fact that I did not have complete control over that code (and OpenVPN is a major feature of Asuswrt-Merlin). Asus must have felt the same as they eventually replaced it with their own implementation, which they decided to keep closed source. So in 2020 I decided to do just the same: rewrite the whole implementation (but keeping it under a GPL licence, of course). OpenVPN must be the only major firmware feature where Asus and I have totally separate code bases. And I'm fine with it, as it allows me to have complete freedom over it, allowing me to make major feature changes, like my Policy Routing implementation. So while end-users saw almost no change from this rewrite (aside from a minor webui cleanup that I did at the same time, and numerous bugs discovered while diving into that code, and fixed in the rewrite), this has been a major project for me this year. The final result isn't just code on which I have ownership, but it also makes maintaining it a bit easier. A recent bug report for instance only took me a few minutes to track down and to fix, thanks to this new design.
As the current year is almost over, the 386.1 release is shaping up pretty well. Asus is introducing not only AiMesh 2.0 in it, but also a number of other enhancements all over the place. This has been a long beta test cycle for multiple reasons:
- New codebase, with lots of changes to merge in
- Asus themselves were still in a beta cycle, which meant frequent GPL merges for me to do
- The reunification of the AX codebase with the main codebase was a lot of work on my end of things
- New model additions, which meant new SDK merges
There is still some work left to do, as I am currently awaiting another major code drop, which should take care of a number of issues currently present, namely around the newer AX models.
2020 in summary
- Four new models
- Two models removed
- 6 releases (10 firmwares if we consider the branched out firmwares for older models)
- AddOns API
- Rewrite of OpenVPN code
- The move to 386 (almost there)
- A new project website
The plan for 2021
The short term plan is evidently to finalize the 386.1 release and push it out. I am currently awaiting what will probably be the final GPL code drop upon which I will eventually release the 386.1 final build. Development rate will probably be affected by whatever workload my job brings after the Holidays, so they could also cause things to be delayed a bit more.
After that, I will probably focus on bug fixing if anything (that I can fix) comes up from such a major release. And then I will evaluate the final conclusion of the GT-AC2900 experiment, and determine whether it would be doable to add even more ROG models in the future, or if the total number of supported models is simply too much. 2021 will probably once again be mostly focussed on maintaining rather than adding any new major feature (I currently have nothing major on my internal TODO list, just a few minor under-the-hood enhancements).
Conclusion
Once again, it's time for me to close this post (and this craptastic year) by thanking everyone who has had a role in this project:
- Everyone who felt the need to donate through Paypal. It's not necessary (as this project costs me very little), but it's certainly very much appreciated!
- The community for taking care of handling the majority of the end-user support
- Third party developers who have been providing numerous feature enhancements to the Asuwwrt-Merlin platform. They are part of the reason why I can focus on keeping in sync with Asus's code without having to feel guilty at not spending more time adding new features - their addons are taking care of that. That means one less source of stress for me.
- Asus for providing hardware, source code, and general support to this project (for those who didn't know, they do provide me with router samples to work on, which is critical to this project).
- @thiggins for allowing us to crash at his place on SNBForums. We're sometimes a noisy bunch, but I think overall we're not all that bad
Also I'd like to extend shout outs to the two active fork maintainers,
@john9527 and
@GNUton . Doing what they are doing isn't easy, and they don't get as much spotlight as they probably should. If you are using an older model that I no longer support or are interested in one of Asus's DSL models, make sure to have a look at their respective forks.
Hope that we all have a much better 2021, and I'll see you on the other side.