Some members of the free software community are keen to complain about companies which are using free software without giving anything back. But, at Lanedo, we often witness the opposite: companies that are really happy with free software and, when facing an issue, want to act like a good open source citizen. This was for example the case when we worked with Moonen Packaging, a Dutch company.
Moonen Packaging’s request was pretty straightforward: “We are happy users of LibreOffice, which we use quite extensively. But we are facing a performance regression and we would like to improve it. Can Lanedo help us to fix it not only for us but for any LibreOffice user? That way we would contribute back to the project.”
Needless to say, this is exactly the kind of requests that put a big smile on our faces. With some customers, we sometimes have to explain that contributing back to the community is a long term investment: you will not have to maintain your own build, you will benefit from further improvements. In this case, the clarification was not even needed!
A big part of the work is to be able to reproduce the bug, to identify a minimal use case. Sometimes, the expected result is not even clear for the customer.
Moonen Packaging did its part of the job by reporting very clearly the problem upstream in Bugzilla: LibreOffice Calc is terribly slow when using the function VLOOKUP to connect to an external spreadsheet with many rows.
This job saved a lot of time for Lanedo which resulted in a cheaper project. Once again, being a good open source citizen proved to be useful by allowing Moonen Packaging to save money on the fix itself.
We identified two situations and, for each, two use cases. In the first situation (A), we open the document and perform the VLOOKUP immediately. In the second situation (B), we also open the document that contains the source data before performing the VLOOKUP. For each of them, we tried to do one simple VLOOKUP (A1 and B1) or to fill a complete sheet, an operation that would perform more than 10,000 VLOOKUPS (A2 and B2). Due to particular cache mechanisms, it is not guaranteed that one single VLOOKUP will be faster than 10,000 similar requests.
The situation was quite bad: A1 took 153 seconds, A2 took 87s, B1 took 133 seconds and B2… one complete week!
Solution & Upstreaming
Skipping the technical details, let just say that we were able to bring A1, A2 and B1 to workable levels with the given budget. Moonen Packaging specifically asked us to upstream directly the patch and to not bother with a special custom build. According to their own words : “We will enjoy the benefits of our contribution with the release of LibreOffice 4.2!”
Indeed, A1 will take 40s instead of 153s, A2 will take 9s instead of 87s, an and B1 will take 35s instead of 133s. B2 has been reduced from one week to 48h, but this is not acceptable yet. Some experiments make us confident that we could reduce those 48h to… 10s or even less! But that would require several days of works on our side which, unfortunately, were out of the allowed budget for this project.
If another company heavily relying on VLOOKUP is interested by sponsoring the work, please contact us. In the meantime, we are still trying to find some time between two customers to have the work done and sponsored by Lanedo itself.
Using Free and Open Source software is not only a net saving on the licensing fee: it may also help a lot when there are troubles. Without any external support, the company is usually able to get possible solutions through the official bug tracker or forum of the project.
When it is not enough, the company is able to select the provider of its choice (in this case Lanedo) to directly work on the issue and upstream it. No time wasted on the investigation and a better control over the costs. And if there’s no budget to solve all the remaining issues (in our case B2), you can still hope that some other companies will join the effort.
All of that with the satisfaction of becoming a contributor of the software you use everyday.