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