Can Transpiled Output Source-Code Have Different License And Different Copyright Holder Than Input Source-Code ?
Prj-A──>─┬─>Prj-TP──>────┬─>Prj-┐
(Apache) │(Python-to-C++)│ TP │
│ │ │
my code─>┘ my code─>───┘ │
│
Prj-G──>─┬─>Prj-TG──>─┬─>Prj──>─┤
(GPLv2) │ (Go-to-C++)│ TG ┝━>Prj
│ │ │ D
my code─>┘ my code─>─┘ │
│
Prj-B──>─┬─>Prj-TC──>──┬─>Prj─>─┤
(BSD) │ (C#-to-C++)│ TC │
│ │ │
my code─>┘ my code─>─┘ │
│
my code─>────────>────────>─────┘
Diagram - A
I have applied pre-processors on source-code of (1) Python
based Project-A (Prj-A) with Apache1 License, (2) Go
based Project-G (Prj-G) with GPLv21 License, (3) C#
based Project-B (Prj-B) with BSD1 License, etc and prepared them for Transpiler, and then applied transpiler on source-code of those software projects as input source-code, and Transpiled/translated/converted (aka: Source-to-Source conversion) those input source-code into C++
based output source-code, and then i have added even more C++
codes in each, and created completely C++
-language based (1) Prj-TP (2) Prj-TG (3) Prj-TC respectively, And then i have taken & used different portions of Prj-TP, Prj-TG & Prj-TC's code/files, and incorporated into my another project, Project-D (Prj-D), Can i use my own name to Copyright C++
based new source-code of Prj-D ? and Can i use different license for the Prj-D ?
DETAILS:
Prj-A uses Python
language, & has Apache License.
Prj-G uses Go
language, & has GPLv2 License.
Prj-B uses C#
language, & has BSD License, etc.
in each of this "upstream" project i have made small contributions.
Prj-A──>─┬─>Prj-TP──>────┬─>Prj-┐
(Apache) │(Python-to-C++)│ TP │
│ │ │
my code─>┘ my code─>───┘ │
│
Prj-G──>─┬─>Prj-TG──>─┬─>Prj──>─┤
(GPLv2) │ (Go-to-C++)│ TG ┝━>Prj
│ │ │ D
my code─>┘ my code─>─┘ │
│
Prj-B──>─┬─>Prj-TC──>──┬─>Prj─>─┤
(BSD) │ (C#-to-C++)│ TC │
│ │ │
my code─>┘ my code─>─┘ │
│
my code─>────────>────────>─────┘
Diagram - A
I'm not very-familiar with or expert on Python
, Go
, C#
computer programming language.
I have learned C
, C++
, Assembly
, etc so i'm confident with those.
Compiled C++
program runs much much faster than Python
, Go
, C#
, etc.
I needed to add new feature into those software, but their dev(s) has denied to add, with different excuses, etc.
Lic = License.
TP = Transpiled-Python-to-C++
: Prj-A(Python
)(Lic:Apache
)⮕Prj-TP(C++
).
TG = Transpiled-Go-to-C++
: Prj-G(Go
)(Lic:GPL
)⮕Prj-TG(C++
).
TC = Transpiled-C#-to-C++
: Prj-B(C#
)(Lic:BSD
)⮕Prj-TC(C++
).
So i have transpiled source-code of Prj-A, Prj-G & Prj-B , into C++
based source-code for new projects Prj-TP, Prj-TG, Prj-TC respectively:
- First i had to change & prepare certain code-lines in each source-code file of
Python
,Go
,C#
based project, to make it transpiler-friendly. I had to use many different techniques & scripts at this stage. - Then i have applied different transpiler software on those
Python
,Go
,C#
source-code files, one by one. - Transpiler software mostly transpiled only subset of
Python
,Go
,C#
language, which are very SIMPLE & EASY & BASIC code, correctly. Transpiler software cannot & did-not convert all types ofPython
,Go
,C#
source-code, especially COMPLEX CODE STRUCTURES. - Transpiler skipped many advanced & COMPLEX
Python
,Go
,C#
source-code lines & sections, and also incorrectly converted many lines & sections. - Then I have spent long long time, to manually COMPARE & CHECK each line of INPUT & OUTPUT SOURCE-CODE, and i have converted those skipped
Python
,Go
,C#
source-code lines & sections, into my ownC++
based code line or section, as much as i could. I have also transpiled "incorrectly" convertedC++
into correctC++
, etc. There is no trace ofPython
,Go
,C#
left anymore in the finalC++
source-code. - So finally transpilation process was done.
- So finally i have new source-code based new projects: Prj-TP, Prj-TG, Prj-TC, etc.
Then, i have taken necessary C++
source-code lines, sections or files from Prj-TP (transpiled from Prj-A w/Lic:Apache
) , Prj-TG (transpiled from Prj-G w/Lic:GPLv2
) or Prj-TC (transpiled from Prj-B w/Lic:BSD
), and used into my own new Project-D (Prj-D). ( D = Final-Destination )
Prj-A──>─┬─>Prj-TP──>────┬─>Prj-┐
(Apache) │(Python-to-C++)│ TP │
│ │ │
my code─>┘ my code─>───┘ │
│
Prj-G──>─┬─>Prj-TG──>─┬─>Prj──>─┤
(GPLv2) │ (Go-to-C++)│ TG ┝━>Prj
│ │ │ D
my code─>┘ my code─>─┘ │
│
Prj-B──>─┬─>Prj-TC──>──┬─>Prj─>─┤
(BSD) │ (C#-to-C++)│ TC │
│ │ │
my code─>┘ my code─>─┘ │
│
my code─>────────>────────>─────┘
Diagram - A
Transpiled codes usually need lots of re-writing & testing & modifications, to functionally perform same-way as "upstream" software.
So at this point, these projects: Prj-TP, Prj-TG, Prj-TC & Prj-D, still have too much bugs and incompleteness, and still needs lots of fixing.
So I want to publish my C++
based Prj-D source-code as new project, and share source-code with other devs/users, so that others can collaborate+contribute to fix & improve it further, if they want to.
Can i publish Prj-D with a different License ? (different than what is used in Prj-A/Prj-G/Prj-B).
Can i use my name to Copyright Prj-D ?
Can i also release Prj-TP, Prj-TG, Prj-TC, each under different License ?
Can i use my name to Copyright Prj-TP, Prj-TG, Prj-TC ?
Do i need to notify Prj-A/Prj-G/Prj-B ?
END OF DETAILS.
EDIT / UPDATE :
i have added this/below section(s) after User:
Bart van Ingen Schenau posted his initial answer in below.
Please check "EDIT"/"UPDATE" section in his answer.
As GPLv2 license is grabbing downward/derivative works/projects/source-codes , in my case I definitely want to avoid usage of GPL license , and my reason of creating this SE Question was to find out if I can use a different license or not, in above mentioned final project Prj-D.
So i have re-searched again & found a replacement for GPLv2
based Prj-G, let us call this new project, Prj-M, as it is under MIT
license.
This Prj-M is using same "Go" language, like previous Prj-G . I will have to do similar work like before, to transpile Prj-M into Prj-TG2.
Prj-A──>─┬─>Prj-TP──>────┬─>Prj-┐
(Apache) │(Python-to-C++)│ TP │
│ │ │
my code─>┘ my code─>───┘ │
│
Prj-M──>─┬─>Prj-TG2──>─┬─>Prj─>─┤
(MIT) │ (Go-to-C++) │ TG2 ┝━>Prj
│ │ │ D2
my code─>┘ my code─>─┘ │
│
Prj-B──>─┬─>Prj-TC──>──┬─>Prj─>─┤
(BSD) │ (C#-to-C++)│ TC │
│ │ │
my code─>┘ my code─>─┘ │
│
my code─>────────>────────>─────┘
Diagram - B
I will transpile simple basic small portion of Go
code into C++
by using software trnspiler, rest of the advanced code sections, complex code sections, etc all will be manually transformed by me from Go
into C++
.
Based on above code conversion diagram and related info , Can i publish Prj-D2 source-code with a different License ? a different license than what is used in Prj-A/Prj-M/Prj-B.
- ( i think i can, for above case )
Can i use my name to Copyright Prj-D2 ?
- i think i can add my-name under previous copyright-holder, as explained by User:"Bart van Ingen Schenau" in his answer . I have to use previous copyright-holders too, because i have used software transpiler on some portion of the
Python
/Go
/C#
source-code conversion.
Can i also release Prj-TP(Apache
), Prj-TG2(MIT
) & Prj-TC(BSD
) source-code, each under a different License ?
- i think i can, for above license cases.
Can i use my name to Copyright Prj-TP, Prj-TG2, Prj-TC ?
- i think i can add my-name under previous copyright-holder(s), as explained by User:"Bart van Ingen Schenau" in his answer, because i have used machine to convert some portion of the input source code . If i convert
Python
/Go
/C#
intoC++
without using any machine or transpiler software, with my own hand, eye, brain manually, then i do not need to add previous copyright-holder(s).
Do i need to notify Prj-A/Prj-M/Prj-B ?
- i think i don't have to, as explained by User:"Bart van Ingen Schenau" in his answer, and its courteous to do so anyway . I will ofcourse inform upstream original authors/devs . and their name is also in copyright notice.
I have forgotten to mention & ask this earlier : I have added new features in new project Prj-D and also added new features in transpiled project Prj-TG, which did not exist in "upstream" project Prj-G or in transpiled project Prj-TG . And i will add those same new features again for the planned new project Prj-D2, and in Prj-TG2 . These new features are using new source-code files created by me . Can i use only my-name as copyright-holder in those specific new source-code files ?
- i think i can, as i alone created those source-code files.
And, by the way, i also want to inform you, that, projects Prj-TP, Prj-TG, Prj-TC, Prj-D, & planned new projects Prj-TG2, Prj-D2, etc, EACH has (and will have) completely different & new software name.