Introducing ThinLinc 4.16.0

Jan, 30, 24
Written by: William Sjöblom

Back to our ordinary release schedule after the great effort that was ThinLinc 4.15.0, we are pleased to introduce ThinLinc 4.16.0! Compared to our last release that almost solely consisted of changes that were clearly visible, this time around, we instead put our minds on enhancements under the hood.

Removing dead batteries

Back at ThinLinc’s inception at the turn of the millennia, we needed a way of concurrently handling connections coming in from ThinLinc clients. The choice fell on the Python module asyncore. Around this module, the ThinLinc server side was built. In retrospect, the asyncore implementation has served us well and warranted little attention over the last 20 odd years. That is, until now.

In Python 3.12, our trusty asyncore was removed from the Python standard library as part of PEP 594 – Removing dead batteries from the standard library and superseded by the new asyncio module, promising better performance and a more modern and expressive approach to concurrency. Compatibility across all major Linux distributions, and by implication all recent Python versions, is a quality that we value highly. Therefore, the grunt work put into ThinLinc 4.16.0 consisted of rewriting the server-side networking to use asyncio. As of doing this, we got to revisit this core network code, giving us the opportunity to reengineer and clean up the parts that did not stand the test of time, iron out hypothetical edge cases, and add even more automated tests. Besides increasing developer productivity with the new concurrency tools and construct brought in with asyncio, the solid networking foundation we laid in this release will serve us well in the 20 years to come. To summarize:

  • We added compatibility with Fedora 39 and rolling-release distributions, and ensured compatibility with upcoming distribution releases such as Red Hat Enterprise Linux 10.
  • We improved the diagnostics and logging in the Master and Agent daemons.
  • We increased robustness of the Master and Agent daemons.
  • The expressiveness and new concurrency constructs of asyncio made our days at work a little better!

Open-source components

Besides the migration from asyncore to asyncio, we have upgraded all of ThinLinc’s security critical open-source components. We have also been busy contributing to the open-source projects that make ThinLinc possible. One highlight of this effort is fixes to the projects unfs3 and pynfs, further strengthening the robustness of ThinLinc’s local drive redirection.

As always, this release contains numerous minor enhancements across the board to make ThinLinc even more functional, easy to use, and secure. For the full list of changes, see the ThinLinc 4.16.0 Release Notes. The 4.16.0 server and clients are available on our download page. As Cendio and ThinLinc steadily grows, we have high ambitions to provide an even more streamlined product going forward. We look forward to hearing what you think on the ThinLinc Community.