Moja firma (nazwijmy je Acme Technology) ma bibliotekę około tysiąca plików źródłowych, które pierwotnie pochodziły od jej grupy badawczej Acme Labs, inkubowanej przez kilka lat w grupie programistów, a ostatnio udostępniono garstce klientów pod nieujawnianie. Acme przygotowuje się do wydania około 75% kodu społeczności open source. Pozostałe 25% zostanie wydanych później, ale na razie albo nie jest gotowy do użytku przez klienta, albo zawiera kod związany z przyszłymi innowacjami, których muszą trzymać z dala od konkurentów.
Kod jest obecnie sformatowany za pomocą #ifdefs, które pozwalają tej samej bazie kodu współpracować z platformami przedprodukcyjnymi, które będą dostępne dla badaczy uniwersyteckich i znacznie szerszego grona klientów komercyjnych, kiedy przejdą na open source, jednocześnie będąc dostępne do eksperymentów i prototypowania oraz do testowania zgodności z przyszłą platformą. Utrzymanie jednej bazy kodu jest uważane za niezbędne dla ekonomii (i rozsądku) mojej grupy, która miałaby trudności z utrzymaniem dwóch kopii równolegle.
Pliki w naszej obecnej bazie wyglądają mniej więcej tak:
> // Copyright 2012 (C) Acme Technology, All Rights Reserved.
> // Very large, often varied and restrictive copyright license in English and French,
> // sometimes also embedded in make files and shell scripts with varied
> // comment styles.
>
>
> ... Usual header stuff...
>
> void initTechnologyLibrary() {
> nuiInterface(on);
> #ifdef UNDER_RESEARCH
> holographicVisualization(on);
> #endif
> }
I chcielibyśmy przekonwertować je na coś takiego:
> // GPL Copyright (C) Acme Technology Labs 2012, Some rights reserved.
> // Acme appreciates your interest in its technology, please contact xyz@acme.com
> // for technical support, and www.acme.com/emergingTech for updates and RSS feed.
>
> ... Usual header stuff...
>
> void initTechnologyLibrary() {
> nuiInterface(on);
> }
Czy istnieje narzędzie, biblioteka do analizy składni lub popularny skrypt, który może zastąpić prawa autorskie i usunąć nie tylko #ifdefs, ale także warianty takie jak #if zdefiniowane (UNDER_RESEARCH) itp.?
Kod jest obecnie w Git i prawdopodobnie byłby przechowywany gdzieś, gdzie używa Git. Czy istnieje sposób bezpiecznego łączenia repozytoriów ze sobą, abyśmy mogli skutecznie zintegrować nasze ulepszenia z wersjami open source? Porady na temat innych pułapek są mile widziane.