Neubot 0.4.11 released

Version 0.4.11 is the latest generally-available stable release of Neubot, distributed for Ubuntu >= 10.04, MacOSX >= 10.6, Windows >= XP SP3 and FreeBSD, as well as in source format.

Here's what changed in less than 140 characters: win32 auto updates prototype, bug fix for a database bug that corrupted pre-0.4.6 results, new event scheduler, cleanups, docs and fixes. Install, upgrade instructions at, read on for more details.

This release contains 111 commits. The diffstat says: 86 changed files with 4,102 additions and 278 deletions.

Here is the list of what changed and why:

  • win32: auto updates prototype (still experimental)

    This commit includes support for automatic updates in the Windows environment. This piece of work is still marked "experimental", mainly because the code for signing and verifying the update tarball is not yet implemented. My opinion is that one can also trust and install code that is not signed, but I know that most people are not of the same advice. Hence, by default this feature is disabled, and I won't make it the default until there is sign/verify code. So, if you want to exploit it, make sure that you set win32_updater to 1, using the settings page (

  • database: fix pre-0.4.6 results corruption bug

    In Neubot 0.4.6 I made a stupid programming mistake and introduced a bug in the database code. This bug caused pre-0.4.6 results to be somewhat corrupted. In particular, for each result row, values were permuted. Luckily it seems that the permutation depends on the version of Python and on the system architecture. This means that I'm confident that it's possible to undo this problem in most cases.

    The fix works like this. First, runs both the broken and the fixed code to compute the buggy permutation. Then, it scans the whole database of results and searches for suspicious lines, i.e. lines where the IP address does not look like an IP address, or the operating system name is not a string, etc. Whenever a suspicious line is found, the code tries to undo the buggy permutation. If the result after the undo makes sense, the code overwrites the suspicious line. Otherwise it is left untouched.

    Note that it takes some time to search the whole database and eventually fix suspicious lines. It should not be a tremendous boot-time issue: on UNIX Neubot forks before opening the database, while on MacOSX and Windows it is started as a background process. The worst thing that can happen is that, just after boot, Neubot uses a lot of CPU for quite some time.

    I have tested this bugfix passing Neubot big databases collected on the server side during the lifetime of the project. I have tried to be careful to guarantee that the algorithm to fix this bug consumes a constant amount of memory and does not fail spectacularly. I have, of course, also checked that the bugfix code does not screw new data. And I have also been quite conservative: the patch was finalized more than one month ago, but I decided not to include it in 0.4.10 to perform further testing. However if you notice any issue with it, please let me know as soon as possible.

  • www: add workaround for IE8 plot issues

    As reported by Joachim Kross (thanks!), speed and latency plots are empty with Internet Explorer 8, unless one enables the compatibility view mode. This release ships with a workaround, which loads the proper set of javascripts with Internet Explorer 8. With this fix in tree, plots are now shown correctly, both in compatibility and in normal mode.

    Thanks to Alessio Palmero Aprosio, who did most of the work needed to workaround this problem.

  • new event scheduler based on stdlib sched

    Comparative tests showed that Python standard library scheduler module (sched) was more efficient than Neubot native one. As a consequence, quite some time ago I started working on a diff to replace Neubot scheduler with standard library one. During this release cycle I finally managed to finalize this work, and, since it was stable, I decided to include it in this relase.

  • More code rationalizations, cleanups, documentation improvements, and bug fixes.

Full change log available here:

Diff since previous version here:

Commit history here:

SHA256sums here:

Errata here:

Data here:

Short-term roadmap here:

Long-term roadmap here: