I did the initial port of the Tomato OpenVPN code into Asuswrt-Merlin. Ported the C code, and wrote the whole webui code. Eventually, Asus took that code, added it to the stock firmware, and added a few changes of their own. They wrote the code to import an ovpn config file, they also replaced my advanced Client UI with their own simplified UI code, and integrated it with PPTP and L2TP VPN clients. I picked their ovpn import code, but kept my more advanced web interface.
That Tomato code was under a licence from its original author (Keith Moyer). At the time I had asked (and received) his permission to reuse the code. Asus on their end added a README containing Keith's Copyright disclaimer.
Over time I kept OpenVPN up-to-date, migrating to 2.4.x when it came out, and adding the 2.4.x specific features. Asus kept it at 2.3.x. I also implemented routing policies, while Asus on their end went down a different path with their VPN Fusion implementation.
With firmware 382.xx, Asus rewrote most of the OpenVPN code, and made it closed source.
At that point, I decided (out of necessity since it was now closed source) to just keep going down my own path with the OpenVPN support. That's why our two implementations are gradually diverging more and more. I kept going on with my RPDB-based policy routing, and Asus on their end have VPN Fusion. I also spent some time simplifying a bit the webui settings, since I no longer had to keep them all in sync with Asus's own implementation.
I know Asus has finally upgraded to OpenVPN 2.4.x for the next versions (from what I saw in recent GPLs - no choice for them since it will be required when they move to OpenSSL 1.1.x). However so far they don't seem to have implemented any of the new 2.4.x features, like NCP or LZ4 compression.