New version of Bittorrent client Transmission 4.0.0, which has switched from SI to SI ++

After almost three years of development published release transmission 4.0.0.0 , relatively light and undemanding to the resources of the Bittorrent client written in the user’s diverse interfaces: GTK, QT, NATIVE MAC, Web Interface, Daemon, Cli . Code spreads under the licenses of GPLV2 and GPLV3.

The key change in the new branch was the translation of the code base from SI (C90) to C ++. Previously, only an interface based on QT was written on C ++. The main reason for the transition of the entire project to C ++ is the desire to use the additional opportunities provided in the standard C ++ library, and the presence of more advanced means for checking types in C ++. The GTK interface is translated to the use of gtkmm , strapping over GTK for the language C ++.

Along the way, significant refactoring of the code base was carried out, which allowed to reduce the size of the code by 18%, improve the coverage of tests and simplify the maintenance. The process of interaction with the community has been modernized, a more active response to error messages and the transmission of changes through PULL queries have been implemented. A transition to semantic versioning was carried out when assigning versions numbers implying the use of X.Y.z notation (instead of previously used X.NN), in which X changes when changes that violate reverse compatibility, Y changes when the functionality and Z when correcting errors.

Other changes:

  • Added support for the use of torrents in bittorrent v2 and hybrid torrents (so far only the use of ready -made torrents, the possibility of creating torrents based Bittorrent 2 will appear in one of the following issues).
    In the Bittorrent V2, the departure from the use of the SHA-1 algorithm in favor of the Sha2-256 algorithm, which is used both for monitoring the integrity of data blocks and for indexes (Info-Dictionary), which violates compatibility with DHT and trackers. To reduce the size of the torrent files and check the loaded data at the block level, the indexes are transferred to the use of the hash-derevas measure. The possibility of binding individual hash-broods to each file and aligning files in parts (without adding additional filling after each file) has been added, which made it possible to get rid of data duplication in the presence of the same files and simplified the identification of different sources for files. The effectiveness of coding the structure of catalogs in the torrent has been increased and optimization was added to process a large number of small files.
  • Web-interface is rewritten using more modern methods of JavaScript development and adapted for use on mobile devices. The code is delivered from the use of the JQuery library. In a compressed form, the Web-interface now occupies only 68 kb.
/Media reports cited above.