asciinema returns to python from go

asciinema_compOne of the most handy and beautiful software on Linux, asciinema, has decided to end its adventures in go and return back to python. The devs have decided to revert back to the last stable version with python, v0.9.8 along with some of the fixes done meanwhile. The go branch will be left unmaintained.

This is a reverse trend we are seeing. Through constant advertisement Google has managed to make go reasonably popular. You may remember the well-covered Go-playing AI AlphaGo that defeated world-class Go player Lee Se-dol a few months back. Go has its own advantages over Python, e.g., easy concurrency, startup and runtime performance, stand-alone binary etc. However, there are arguments against go as well. You can refer to this in-depth article from Rob Pike on why C++ programmers aren’t moving to Go. In brief, Go provides much less than programming languages like C and C++. It’s also abstracted much more than Python.

Anyway, here’s the list of bothers from asciinema devs which were important factors behind the decision to drop go:

  • No need for concurrency or high speed here.
  • Python is high level language while Go is low, system level language (I think it’s fair to say it’s C 2.0). 95% of asciinema codebase is high level code and there’s basically single file containing system calls like select/signal/ioctl/fork.
  • Build problems: pty/terminal related Go libs don’t support as many architectures and operating systems while Python runs basically on every UNIX-like system.
  • Go’s lack of versioned packages and central repository makes packaging cumbersome. For example, some distro packaging rules don’t like straight-from-github-master dependencies (understandable!) while at the same time they don’t like vendored (bundled) dependencies (also understandable).
  • Batteries included: argparse, pty, locale, configparser, json, uuid, http. All of these excellent modules are used by asciinema and are part of Python’s standard library. – – Python stdlib’s quality and stability guarantees are order of magnitude higher than of unversioned Go libs from Github (I believe discrete releases ensure higher quality and more stability).
  • The less external dependencies the easier the job for native package maintainers – as of this moment we have zero external dependencies!
  • Casting int32 to int64 to… gets old fast.
  • if err != nil { gets old even faster.

A point to be noted here: go is a lower level language than python, but it doesn’t compare to C or C++.


Leave a Reply

Your email address will not be published. Required fields are marked *