Odoo vs Flectra
History and facts behind the copyright infringement suit
Flectra is a fork of Odoo Community, and one of its initial goals was apparently to copy many features from Odoo Enterprise. In the early months of its existence, significant cases of copyright infringements of Odoo Enterprise were detected in the copied features inside Flectra. Its authors have a history of repeatedly copying and obfuscating proprietary code.
In Dec 2017, GitHub executed a DMCA takedown of the Flectra repository, and the Commerce Court of Ahmedabad issued an injunction order requesting Tech Receptives to stop all activities involving Odoo Enterprise.
At Odoo, we solve dozens of reported infringements per year by just talking to the developers (usually to defend community modules authors). But after several attempts to solve the issue with Tech Receptives, the Flectra developers continued to infringe copyright and licenses. Our ultimate recourse was to initiate a legal action (unfortunately); the first one in the history of Odoo.
History & Facts
Flectra announced with homepage flectrahq.com. An initiative driven by Tech Receptives Pvt Ltd (a Partner of Odoo at that time), and funded by Thomas Winteler, from Win-Soft.ch.
Flectra announces features for Flectra 1.0. Most of them are Odoo Enterprise features (Material UI, App Builder, Follow-ups, Lead Scoring, Quality, PLM, Helpdesk, Currency rate update, …)
Flectra forks Odoo 11 after the official release: https://github.com/flectrahq/flectra.
Let's call this version "FlectraRepo-1".
Flectra posts a video demo of the "Flectra App Builder". It is visibly a mirror copy of the features and UI of Odoo Studio. But more than that, it is actually the code of Odoo Studio with minor modifications. The video shows at 00:15 and 01:04 that the tooltip of the "Flectra App Builder" icon is "Toggle Studio" (exactly from the code of Odoo Studio 11.0) (screenshot1) (screenshot2)
Flectra merges a new UI design (rev. 4f6d44a1). It contains several parts clearly copied from the Odoo Studio source code, infringing the license and copyright of Odoo.
Odoo sends an official notice to the Flectra team about the multiple copyright infringements detected in their source code, including some clear examples. Comments, variables, structure, and entire blocks are visibly copied:
- menu_search.less copied from same file in Odoo Enterprise (screenshot)
- webclient_layout.less copied from same file in Odoo Enterprise (screenshot)
- app_switcher.less copied from same file in Odoo Enterprise (screenshot)
- debug_manager.js copied from same file in Odoo Enterprise (screenshot)
- web_backend_theme.xml has content from base.xml file in Odoo Enterprise (screenshot)
- webclient.less has content from the same file in Odoo Enterprise, including an invalid link to a "/web_enterprise" URL from Odoo Enterprise, which does not exist in Flectra code (screenshot)
Flectra answers the notice and says:
"We have reset the code in our repository and remove the mentioned code. We are going to take utmost care in future that this kind of mistakes does not happen."
Parthiv Patel, CEO of Tech Receptives holds a conference call with Fabien Pinckaers, CEO of Odoo and Mantavya Gajjar, Director of the India branch of Odoo. It is decided that the Partnership will be terminated and Odoo will stop selling Apps from Tech Receptives/73Lines as there is obviously no cooperation between the companies anymore. Tech Receptives CEO also repeats that Flectra made a mistake and will remove the infringing code and work "from scratch" on the features.
The Flectra repository is deleted, and replaced with a new one, where the commit 4f6d44a1 introducing the new UI is gone, and the history is rewritten (all hashes change).
Let's call this version "FlectraRepo-2".
Flectra merges a new feature: Currency rate update module (rev. 1d9e0c9). This module has many aspects in terms of structure, file names, contents, comments and code blocks that bear a striking resemblance with the "Live Currency Exchange Rate" module of Odoo Enterprise, indicating that it was developed based on the Enterprise module:
- Improbable structure reproduced (screenshot)
- Similarly misplaced code (screenshot)
- More copied structure and code, with renamings (screenshot)
More than that, this module also copies code from the OCA module which is under AGPL, without even preserving attribution, and thus violating the copyright and license of those OCA modules. (screenshot1, screenshot2)
At this point, it is clear that the infringements will continue.
As a follow-up of the 2017-10-17 call, Odoo sends an official letter to Tech Receptives to terminate the Partnership, with a request to cease and desist the infringing activities and confirm it within 7 days. A reply from Tech Receptives will come on 2017-12-05 (see below)
Odoo sends a copy of the partnership termination letter to 2 possible Flectra investors (Thomas Winteler + a director of Tech Receptives Singapore, David Lim)
Flectra merges a new feature: CRM Lead Scoring (rev. 37f78c61). Once again, this module contains code that seems to indicate that it was developed based on the code from Odoo Enterprise. The developers put more energy into renaming variables and reworking the code, but it is still visible in some places (e.g: screenshot)
Flectra merges a new feature: Payment Follow-up (rev. c1d366c3). This time, instead of using some Odoo Enterprise code, they copied the code directly from Odoo 8.0. Unfortunately this code was under AGPLv3, so the re-licensing under Flectra as LGPLv3 is not authorized and a violation of copyright. (screenshot)
Later on, this commit will be erased from history, and replaced with a "rewritten" version.
Tech Receptives replies to the letter of partnership termination sent by Odoo on 2017-10-31, with a long list of denials: they deny that Odoo owns the copyright of Odoo Enterprise, deny that Tech Receptives copied it, deny that the Partnership has been terminated for this reason, etc.
Surprisingly, Tech Receptives claims that they have found places where other people illegally publish.
Given the situation, Odoo institutes litigation proceedings by way of a Civil Suit for copyright infringement against Tech-Receptives Solutions PVT LTD before the Commercial Court of Ahmedabad, India.
To secure the evidence necessary for the case, the court orders a commission to visit the Tech Receptives premises and take a backup copy of all computers on which the source code of Odoo Enterprise can be found.
The commission is executed and the court commissioners visit the Tech Receptives premises. The report cannot be published at this point, but the commission found multiple copies of Odoo Enterprise code and Flectra code and took backup copies of the evidence that was found. A copy of the court commissioners' report is sent by Odoo to the same Flectra investors.
Note: some employees from TinyERP Pvt Limited were present to assist the court commissioners and reported that Tech Receptives tried to obstruct the commission, took down their internet connection to stop access to their private bitbucket repositories, and told the commission that the Flectra App Builder was being developed in the USA so they did not have the source code. That code was later found by the commission.
Flectra introduces the Product Lifecycle Management (PLM) feature (rev. f2c8307c). Without surprise, this module contains lines of code that are copied verbatim from the original PLM module of Odoo Enterprise, despite a lot of renamings/obfuscation in other places (screenshot)
New hearing at the court: Odoo attempts to present the new evidence and to obtain an injunction order to stop the repeated infringements. Tech Receptives insists they need an adjournment until January on the ground that the "concerned official" is traveling (surprising because he was present during the commission procedure a few days ago and knew about the hearing!) Next hearing scheduled for December, 26th.
The Flectra repository is deleted again, and a new one is uploaded. Apparently, the only thing that is removed is the commits introducing the PLM feature. Can this be a coincidence? Screenshots showing the difference before/after: (screenshot1) (screenshot2)
Let's call this new version "FlectraRepo-3".
There was at least one more rewrite of the Flectra repository after Flectra-Repo3, further modifying all the way back to introduction of the "Currency Rate Update" feature again (now reintroduced by rev. 067a69a6), with more modifications along the line.
Let's call the next repository version FlectraRepo-4.
Some of the changes in history are interesting:
- The "Currency Rate Update" module is slightly reworked, more things are renamed, and they clarify in the manifest that the author is "Flectra" (sic!) (diff between versions)
- The "Payment Follow-up" (account_followup) module from Odoo 8.0 is erased from history, and replaced with a new payment_followup module (rev. aa036c1b). The author field now only mentions Flectra, but as a nice touch, a comment at the top of the manifest says that it is "Inspired by Odoo version 8 Community module account_followup". Of course the code still contains a lot of copied code from the original code, with more renamings/obfuscation. Tech Receptives certainly thinks that this gets rid of the "AGPLv3" licensing problem. As an example, here is an exercise for the reader: find some of this code in the original 8.0 code: (screenshot) (hint… ;-))
- The Product Lifecycle Management (PLM) feature is reintroduced in FlectraRepo-4 (new revision: 1dc59382). There are several differences between this version and the one of FlectraRepo-2, with a few concepts renamed, some lines modified/removed.
A full diff comparing these 2 introduction commits can be found (here).
- And so on...
Flectra 1.0 is released on Github. Many features are introduced in the repository just before the release, including, among others, the Helpdesk feature (rev. 9de3c5de labelled "[ADD] helpdesk module" which introduces a "support_desk" module), and both the Flectra App Builder and the RMA feature in a commit labelled "[ADD]:rma:module" (rev. 3ea4484) !!
As usual, the source code of the Helpdesk module contains parts that are too similar to the source code of Odoo Enterprise to be coincidences, including several typos, despite the high level of renamings/obfuscation.
Upon analysis of the code of the Flectra App Builder, the architecture of the Odoo Enterprise Studio is still visible for a developer/expert, and some parts of the code are too similar with the Odoo Studio code to be coincidences. However the source code has visibly been heavily obfuscated and reworked to make the comparison between the source codes very difficult. There is probably more evidence to be found in the Quality / RMA features too.
(Screenshots showing the copied code in Flectra App Builder and Helpdesk have been submitted for the lawsuit, and aren't disclosed yet)
At the next court hearing, Tech Receptives submits a written statement denying all claims of the original plaint. We cannot publish their statement, but it articulates around several repeated claims. Among others things, with regard to the copyright infringement (Despite the many evidence indicating otherwise!):
- They deny having copied any code from Odoo Enterprise, and state that everything was originally developed by them, out of their own expertise, without infringing any copyright
- They indicate that they have found parts of Odoo Enterprise code published by third parties on various places online (e.g on Github or Odoo Apps), and that they took the code from there, not from Odoo Enterprise, so they think it means they never used the code of Odoo Enterprise. And that they removed everything after being asked to on 2017-10-13, so no other action is needed.
During the same hearing, the court issues an interim injunction order restraining [Tech Receptives], by itself, its directors, employees, representatives, investors, affiliates, group companies, subsidiaries, partners, servants, retailers, stockists, distributors, and agents from using, developing, selling, offering for sale, licensing, renting, storing, reproducing, launching, stocking, advertising, directly or indirectly any software, application or program using or created/ developed by using the copyrighted source code of “Odoo Enterprise Edition” software and/ or any other activity amounting to copyright infringement of the copyrighted source code of “Odoo Enterprise Edition” software.
The repository flectrahq/flectra on Github is taken down upon request by Odoo, in compliance with the court's injunction order. It was still public before this takedown.
A scheduling mistake forces the next court hearing to be postponed to Jan 30, 2018.
Tech Receptives' CEO Parthiv Patel publishes an announcement offering everyone to compare the source code of Odoo Enterprise and Flectra. His post contains some surprising claims that he has already made multiple times:
- He indicates that third-parties have already infringed the copyright of Odoo Enterprise. He seems to think that this would make his own infringement more acceptable or legal.
- He links to third-party modules that implement features similar to Odoo Enterprise features. He seems to think that Odoo is suing over the copying of the ideas of Odoo Enterprise. It has however been made quite clear to him at every possible occasion that Odoo is suing Tech Receptives because they have developed the Flectra features using the code of Odoo Enterprise, as shown by all the collected evidence above.
At next hearing Tech Receptives' counsel claims that they are willing to remove any infringing code (as usual, based on a list to be provided by Odoo SA, as they don't themselves seem to know what they copied and what they originally wrote). Basically they propose to settle the matter and to undertake before court that they won't copy code from Odoo Enterprise again, in order to avoid a full-fledged trial.
Court hearing: Odoo SA submits a proposition of settlement terms to the defendant counsel, including appropriate undertakings from Tech Receptives to refrain from committing any infringing activities in the future - and awarding appropriate compensation for the damages to Odoo SA. (The terms of the settlement are confidential)
Court hearing: Tech Receptives' counsel says they are agreeable to all settlement terms except the damages, and request that Odoo SA commits to supporting Tech Receptives' Odoo Enterprise customers. The Court adjourns the matter until April 2018 and requires the parties to finalize the settlement terms.
Court hearing: Odoo SA submits alternative settlement terms, that are again rejected by the defendant's counsel. The Court requests to amend the settlement terms with a provision for damage fees to be decided by the Court. The Court also requests an estimation of the expenses and costs incurred.
Court hearing: Odoo SA submits the updated settlement terms. The Tech Receptives counsel requests more time to get approval from Tech Receptives about these terms. As a follow-up, Tech Receptives also complains about contents posted on Odoo SA's website (this very article).
The Court takes record of the settlement terms, and decides to award a compensation of costs to Odoo SA (Like settlement terms, the amount is confidential). The matter is listed for final disposal on April 30.
After being postponed on April 30 due to a statewide strike of lawyers, the Court disposes of the matter and passes an official decree enacting the terms of the settlement order of April 20.
Due to the number of systematically copied features from Odoo Enterprise, demonstrated with the ample evidence mentioned above, the way they proceeded with single-commit feature introduction (no code history visible anywhere for those features), the way they rewrote the history of their repository multiple times to hide past evidence, and the systematic renaming and obfuscation of the code, it seems undeniable that Tech Receptives was knowingly infringing the copyright of Odoo S.A.
This could not have been a "small mistake" by some "intern". It looked organized and planned on a large scale, with some refactorings taking several months (notice the delay between the "App Builder" video and the actual merge in the timeline!)
Finally, and despite the incredible waste of time, energy and money incurred due to this copyright infringement case, it was a key achievement for Odoo SA that the
Commercial Court of Ahmedabad helped us put a stop to these infringing activities.
Hopefully this sends a message that will help deter similar copyright infringement in the future, making this show worthwhile.