XCSoar and LK8000

LK8000 was forked from XCSoar 5.2.3 in 2009 by Paolo Ventafridda. It was illegaly distributed for more than a year, because Paolo Ventafridda refused to open the source code. He has continuously flamed and insulted me personally, despite my best efforts to rejoin the two projects under one large hood.

This page is not supposed to help you choose one or another program, because all of that may not matter to you. This page is only supposed to tell what really happened with quotations and links to the original posts.

Original opinions expressed on this page are my own, they are not an official statement of the XCSoar developers.

Table of contents

The Birth of LK8000

My first post to the XCSoar developers was in June 2009:

“I have a brand new HTC Magic mobile phone with Android. […] My idea was to use the phone for two things: […] 2. run xcsoar during flight. Has anybody tried to port xcsoar yet?” Max Kellermann

Soon, I found myself in the position to do the port myself, which turned out to be extremely difficult with the given code base:

“I believe that the XCSoar code base is in a very bad shape. There are so many global variables, there are too many cross references (everybody imports everybody’s symbols), bad modularity. I’m not trying to put blame on anybody, that just how large projects grow over the years. I’d like to constructive by helping tame the code base.” Max Kellermann

I posted many patches to clean it up, to separate out reusable libraries. Paolo wasn’t comfortable with that:

“I spent months to understand how this code is working, and started to add functionalities. If you now change everything, doing a revolution on the source organization, I shall have to spend more time on it. […] This is not the way things should work. You can’t change the pavement while I am walking on it. […] I care about XCSoar and I will be spending my time on it, and not on your porting problems.” Paolo Ventafridda

“Sure. And what about those poor old developers that all of a sudden discover that you have moved part of the codes here and there? “Paolo Ventafridda

“Not a good idea all these patches right now. While I understand that these patches have a meaning for porting the thing to another platform, I simply can state the fact that if I don’t apply these patches against my version, which is not updated to Max’s, then I’ll loose any chance of alignment in the next future and necessarily shall fork out.” Paolo Ventafridda

Paolo’s problem was that he had been developing patches which he did not publish, which he did not submit for merging. As long as XCSoar development was slow, this works well. But once the “original” code changes a lot, his patches don’t match anymore, and he has to rewrite them.

I posted suggestions on how to resolve that, but Paolo acted like a child:

“if Max patches are in, it means I should spend the next weeks trying to patch the code, understanding this new library approach, and testing the result. I fork out. “ Paolo Ventafridda

“And there will stay, out of my hard disk.” Paolo Ventafridda [talking about the patches I submitted]

Shortly after that, Paolo renamed his private XCSoar version to “LK8000” (“Look like LX8000”).

LK8000 is illegal

In 2009, Paolo Ventafridda has willfully violated the XCSoar copyright by refusing to publish the LK8000 source code. He has kept it secret for a year, before he finally opened his sources in 2010. That is what we know so far.

What may be surprising to some: LK8000 is still illegal!

The GPLv2 says: “Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License.”

This means Paolo’s rights under the GPLv2 have been terminated in 2009. He is no longer allowed to modify or redistribute XCSoar, no single piece of it, not even LK8000 (which is a derived work of XCSoar version 5).

How would Paolo be able to recover from this unpleasant situation? Paolo would have to apologise to the XCSoar 5 copyright holders, and every single copyright holder would have to forgive him.

What if Paolo ignores this problem? Any single copyright holder can sue him for copyright violation at any time in the future. A court may decide that Paolo has to pay license fees retroactively, and forbid him (and anybody else) to continue the LK8000 project, because it is based on an illegal copy of XCSoar 5. This problem doesn’t go away by ignoring it.


“He forgets to note that XCSoar has been illegal for 4 years not distributing the DLL for OLC validation” Paolo Ventafridda

Nice try, Paolo, but wrong. That has never been a problem for XCSoar, for two reasons:

Despite of claiming that XCSoar is illegal because of GRecord.dll, Paolo Ventafridda continues distributing it with LK8000. One needs a strong reality distortion field to hide that contradiction.

LK8000 code cleanup

In 2009, Paolo left the XCSoar project because of my efforts to clean up and reorganize the code:

“I spent months to understand how this code is working, and started to add functionalities. If you now change everything, doing a revolution on the source organization, I shall have to spend more time on it. […] This is not the way things should work. You can’t change the pavement while I am walking on it.” Paolo Ventafridda

Then, two years later:

“I have started a general cleanup of code. […] (phase 1) clean up the code (phase 2) reorganize the code” Paolo Ventafridda

In other words: “I was so wrong in 2009, and you were right from the start.”

Live OLC scores

When XCSoar implemented live OLC scores in 2009, Paolo Ventafridda said that wasn’t important, people were not asking for that.

In 2011, Mateusz Pusz implemented the same for LK8000, borrowing ideas from XCSoar. Although it is so unimportant, it is going to be one of the key features of LK8000 2.2 (link1, link2, link3).

“Mat did a wonderful and very difficult work, alone.” (Paolo Ventafridda)

“No other software on the market, or free, to my knowledge has these features” (Paolo Ventafridda)

Mateusz Pusz then pulled a few numbers out of nowhere:

“Fast - my test application is 130x faster than yours for the same trace” (Mateusz Pusz)

A few weeks later, he exaggerated even more, although we had already explained that his numbers are invalid (but our posts on the forum were censored):

“Execution time on my PC: XCSoar 976s, LK8000 0.8s” (Mateusz Pusz)

We cannot post rebuttals on the LK8000 forum, because Paolo Ventafridda has banned our user accounts there, and he keeps on deleting all of our posts. So here is why Mateusz Pusz is completely wrong:

Mateusz should know better than this.

So here’s XCSoar’s real performance: I have benchmarked both with the same trace size, calculating this flight on a Core i7-920 running Linux. The Linux “perf” utility was used to measure the CPU usage of both.

The result: LK8000 took 373 ms, while XCSoar finished after 56 ms.

Detailed numbers:

"perf stat" with trace size 100 (triangle 50)
What LK8000 XCSoar factor
task-clock 373.543848 56.421547 6.6
cycles 1072778639 148782803 7.2
instructions 1158845544 183696278 6.3
branches 270544216 44515424 6.0
branch-misses 17498527 1810691 9.6

For another benchmark, I have configured LK8000 to use the same trace size as XCSoar. Let the numbers speak for themselves:

"perf stat" with trace size 1000 (triangle 300)
What LK8000 XCSoar factor
task-clock 20756.657379 686.910627 30.2
cycles 60910354442 2007969364 30.3
instructions 72153788748 2072055623 34.8
branches 20595247049 400386403 51.4
branch-misses 526721116 1979752 266.0


The following commands were used to compile LK8000’s TestContest and XCSoar’s TestOLC:

make -C Common/Utils/TestContest/ TARGET=UNIX
make TARGET=UNIX DEBUG=n output/UNIX/bin/TestOLC

LK8000 on Android

I joined the XCSoar project in 2009 specifically to port it to Android. That was a huge amount of work, it has taken nearly two years, but now it’s done.

“At present I don’t plan to move to linux or android.” (Paolo Ventafridda)

Later in 2010, Paolo had an idea: he doesn’t need to make LK8000 portable, he just needs VMWare:

“In the meantime, it looks like a VMWARE machine will be running CE under linux, so theorically LK8000 could run perfectly on Linux soon with no efforts for me.” (Paolo Ventafridda)

“I am keen on thinking that VMware is going to run on Android as it is doing on linux already. So LK8000 can already run on a virtual machine running XP.” (Paolo Ventafridda)

Yes, Paolo is serious: he wants to run LK8000-PC on Windows XP (for x86 CPUs) on VMWare on Android on an ARM CPU. What he does not know (and refuses to understand even after explaining it to him) is that VMWare is not a CPU emulator, it is just a virtualization software which runs the guest software on the “real” CPU. And: embedded VMWare is supposed to be a hypervisor; it is not going to be a software you can just install inside an existing OS.

In the meantime, XCSoar for Android has been finished, and runs extremely well. That makes Paolo jealous:

“2 years of development for an android version which looks like a DOS program, full of bugs, and nobody using” (Paolo Ventafridda, he has deleted that post meanwhile, mirror here)

At the time he wrote that, more than 1,500 people had already installed XCSoar on their Android phone/tablet, getting more every day.

Then, unexpectedly:

“Porting will start after version 3.0 is out, in 2012. We are migrating to version 3.0 removing all microsoft dependancy” (Paolo Ventafridda)

In May 2011, somebody posted to the LK8000 forum:

“I am sure the development team will hate me for this but…. My I add to the pleas for an Android version? In my case, I see an Android version of LK8000 as a significant safety benefit for those users with Andriod phones.” (JBlyth)

Amusingly, that post got censored after a few hours, but here’s a mirror.

In June 2011, Paolo seems to have realized that censoring his user’s feature requests is an insult, and that there is a huge demand for gliding software on Android. Response to yet another request for LK8000 on Android:

“We shall take a decision on when to start porting to android in september.” (Paolo Ventafridda)

I claim: LK8000 on Android is vaporware. None of the current LK8000 developers are up to the task of porting it to Android.

Paolo is still spreading bullshit about InfoBoxes, saying they are not portable and must be removed for the Android port. But, XCSoar’s InfoBoxes work just fine on Android, you say? See, that’s why I have little confidence that LK8000 will ever be ported to Android.

No LK8000 for Windows CE

In December 2011, there was an announcement that work on the Android port will finally start in January 2012:

“There are no more obstacles to port the 3.0 to Android. […] The scheduled activities were to clean up the code while still programming the 3.0, in order to be able to start porting by the end of january 2012” (Paolo Ventafridda)

2011 went, 2012 came, and in January, a new announcement looked very different:

“If personally, alone, should be doing the porting to android, I wouldnt keep any compatibility with CE. […] Just like there is no compatibility for user interface between DOS and Windows. I would keep the LK peculiar user interface and trash configuration, buttons, etc. belonging to 2004” (Paolo Ventafridda)

This sounds exciting: there will be LK8000 for Android, but it will be a rewrite. The “old” LK8000 and its user interface will be deprecated and discontinued. Which means: if you buy a Windows CE device now, it will be useless once LK8000 for Android goes public. If you buy an Android device now, XCSoar is your only choice, because I still believe that LK8000 for Android is vaporware.

Funny quotes