Hi Traffic Control!

As you all may know, the current implementation of Traffic Router runs on
Java 8. While coding directly in Java is still done, there are some reasons
to be critical of Java.

Java often has very verbose syntax when trying to accomplish simple things.
This has made the Traffic Router codebase grow larger over time, leading to
maintainability issues. Also, Java suffers from lack of compile-time safety
in some ways that more modern languages do not. For these reasons, and
because Java is a very old language, some developers who may otherwise be
interested in contributing to Apache Traffic Control may be disinterested
contributing to Traffic Router in particular, simply because they want to
work with more modern languages that do not have the issues that Java does.

Kotlin, a JVM language devised by Jetbrains with the goal of tackling these
problems, has exploded in popularity in recent years, and Kotlin is
becoming a standard way to use the JVM, with Google choosing it as the
preferred language to for developing Android apps. More importantly, as the
Intellij IDEA Kotlin plugin lets you convert Java sources to Kotlin (either
at the file level or an entire project, or anywhere in between), Kotlin has
become a low-effort way to decrease tech debt across large Java projects.

Back to Traffic Router: In order to gauge how we would benefit from
converting Traffic Router to Kotlin (it really is a matter of *converting*,
not rewriting), I converted all of the tests in the Traffic Router "Core"
module to Kotlin. You can see the result here (as you can see from GitHub
Actions, the TR tests all pass): <
https://github.com/zrhoffman/trafficcontrol/commits/tr-kotlin>

Some observations:
- Without any putting any effort into optimizing the existing code, lines
of code shrunk from 10572 in Java to 10217 in Kotlin. See: <
https://github.com/zrhoffman/trafficcontrol/commit/5add06bccc>
- Because it now includes the Kotlin standard library, the Traffic Router
RPM size increases from 48MB to 58MB.
- The converted sources benefit from Kotlin's null safety and type safety
(avoiding wildcard types). See <
https://github.com/zrhoffman/trafficcontrol/commit/0c2eec39d9> (Kotlin
error resolution) and <
https://github.com/zrhoffman/trafficcontrol/commit/d8a0fd3bca> (Kotlin
warning resolution) for the changes involved.

As a side note, because of Oracle's aggressive legal practices, and because
they really do want you to think that they own Java (see: Google LLC v.
Oracle America, Inc.), using Java in Apache Traffic Control is not really
in the spirit of free software. Kotlin is an Apache 2.0-licensed project,
so switching to Kotlin would be a true FOSS win for the ATC community.

So, converting the rest of Traffic Router would be relatively fast and
easy, would result in *no* functionality gained or lost, would leave TR
usage totally unchanged, would make development more enjoyable for current
TR devs, and would maybe catch the interest of additional devs who
otherwise may not be interested in Traffic Router.

How does this sound?

-Zach

Reply via email to