Overview
Examples
Screenshots
Comparisons
Applications
Download
Documentation
Tutorials
Bazaar
Status & Roadmap
FAQ
Authors & License
Forums
Funding Ultimate++
Search on this site
Search in forums












SourceForge.net Logo
Home » U++ Library support » U++ Core » How to distribute some parts of Core in another library?
How to distribute some parts of Core in another library? [message #46881] Mon, 05 September 2016 17:49 Go to next message
cbpporter is currently offline  cbpporter
Messages: 1401
Registered: September 2007
Ultimate Contributor
I think mentioned this before, but Vector, VectorMap and CParser are my favorite classes in U++. This goes only for Core, there are tons of favorites in CtrlLib.

CParser in particular has served me very well for years now, but alas, it is time to move on. Not because there is something wrong with it, but because of one of the projects is:
a. Not C++
b. It could still use CParser, but it feel like overkill but doable to hack C++ inter-op just for one class. The rest of Core is not needed here.

So I'm working on a leaner CParser like class, not in C++, which is re-implemented, so not a simple copy and paste, but in principle it is still the same thing. Sure, it may look a bit different, but on a logical level it is still CParser.

I would also like to OSS this class, under Apache License 2.0.

I have some weird memories of asking this before, but I can't find the thread, so here it goes: how would one go about this?

Re: How to distribute some parts of Core in another library? [message #46885 is a reply to message #46881] Tue, 06 September 2016 17:26 Go to previous messageGo to next message
mirek is currently offline  mirek
Messages: 13975
Registered: November 2005
Ultimate Member
cbpporter wrote on Mon, 05 September 2016 17:49
I think mentioned this before, but Vector, VectorMap and CParser are my favorite classes in U++. This goes only for Core, there are tons of favorites in CtrlLib.

CParser in particular has served me very well for years now, but alas, it is time to move on. Not because there is something wrong with it, but because of one of the projects is:
a. Not C++
b. It could still use CParser, but it feel like overkill but doable to hack C++ inter-op just for one class. The rest of Core is not needed here.

So I'm working on a leaner CParser like class, not in C++, which is re-implemented, so not a simple copy and paste, but in principle it is still the same thing. Sure, it may look a bit different, but on a logical level it is still CParser.

I would also like to OSS this class, under Apache License 2.0.

I have some weird memories of asking this before, but I can't find the thread, so here it goes: how would one go about this?



If it is re-implemented (in what, btw?), I guess you do not even have to ask or mention the original author.

I will certainly NOT sue you Smile
Re: How to distribute some parts of Core in another library? [message #46886 is a reply to message #46885] Tue, 06 September 2016 19:30 Go to previous messageGo to next message
cbpporter is currently offline  cbpporter
Messages: 1401
Registered: September 2007
Ultimate Contributor
Well, it is certainly re-implemented, but visually it can range from different to 99% identical.

Some simple functions like Char, IsId and what-not are 100% identical in a language with C like syntax and there is no way around it.

And to be honest, for some functions, I did start of with cop and pasting the relevant code from CParser, making it compile as is and then redesigning it.

With redesign I mean things like making comments nest optionally (can give you the code for CParser too Smile ), making it not null-terminated, making it more Unicode and so on.

But it is the same design.

And this is why it is confusing. I certainly do not wish to appropriate something that is not mine, nor to not pay proper respects.

Nor do I want a 30 page license like: http://www.ultimatepp.org/app$ide$About$en-us.html
Re: How to distribute some parts of Core in another library? [message #46889 is a reply to message #46886] Wed, 07 September 2016 09:24 Go to previous messageGo to next message
koldo is currently offline  koldo
Messages: 3355
Registered: August 2008
Senior Veteran
Quote:
Nor do I want a 30 page license like: http://www.ultimatepp.org/app$ide$About$en-us.html


Smile Smile

In fact those ~30 page are for plugin and for GCC-MINGW. U++ BSD license is only a few lines.

Theoretically even if you use just GCC you would have to include a big part of those ~30 page Wink


Best regards
Iñaki

[Updated on: Wed, 07 September 2016 09:25]

Report message to a moderator

Re: How to distribute some parts of Core in another library? [message #46890 is a reply to message #46889] Wed, 07 September 2016 13:12 Go to previous messageGo to next message
cbpporter is currently offline  cbpporter
Messages: 1401
Registered: September 2007
Ultimate Contributor
koldo wrote on Wed, 07 September 2016 10:24

Theoretically even if you use just GCC you would have to include a big part of those ~30 page Wink


What?

Licenses are way to complicated!

Since when does the compiler you choose have to do anything with the license of software you use? The tool versus the object of the license?

For convenience I am also packaging TDM in a ZIP, as U++ does, so you don't have to go to the TDM site, use that installer, wait for the download and so on. Does this have license implications?

How about Clang? MSC? Clang on Linux? GCC on Linux?


Re: How to distribute some parts of Core in another library? [message #46891 is a reply to message #46890] Wed, 07 September 2016 13:16 Go to previous messageGo to next message
mirek is currently offline  mirek
Messages: 13975
Registered: November 2005
Ultimate Member
cbpporter wrote on Wed, 07 September 2016 13:12
koldo wrote on Wed, 07 September 2016 10:24

Theoretically even if you use just GCC you would have to include a big part of those ~30 page Wink


What?

Licenses are way to complicated!

Since when does the compiler you choose have to do anything with the license of software you use? The tool versus the object of the license?


We distribute mingw with U++, that is why there is mingw license included.

BTW, for app released, there is now a nice tool "File/Project licenses", which scans packages and creates a complete list of licenses used...

Mirek
Re: How to distribute some parts of Core in another library? [message #46892 is a reply to message #46891] Wed, 07 September 2016 13:41 Go to previous messageGo to next message
cbpporter is currently offline  cbpporter
Messages: 1401
Registered: September 2007
Ultimate Contributor
mirek wrote on Wed, 07 September 2016 14:16

We distribute mingw with U++, that is why there is mingw license included.

BTW, for app released, there is now a nice tool "File/Project licenses", which scans packages and creates a complete list of licenses used...
Mirek

Thanks! Had no idea about that option. In TheIDE the only options from File I have ever used is Set main package, Edit file and Statistics Smile.

BTW, I have never understood why if Zlib is a plugin, plugin/z, then why must it be part of Core too? Instead of simply adding a new package which uses plugin/z if and only if you need zlib support?

I have never used Zlib, ZCompressStream and ZDecompressStream, but they look like something very useful to have in their own package.

But that just as an idea, I really don't care one way or the other.

So I can use "File/Project licenses" and copy&paste that into a license.txt for the command line tool binaries? And do the same + Help menu option for GUI?

That leaves only the source code for the rest.

Still juggling 4 different license sets, exluding mingw.

Re: How to distribute some parts of Core in another library? [message #46893 is a reply to message #46892] Wed, 07 September 2016 15:26 Go to previous messageGo to next message
mirek is currently offline  mirek
Messages: 13975
Registered: November 2005
Ultimate Member
Zlib is used by HttpRequest (becuse pages can be gzipped), that is why it needs to be in Core.

BTW, it even gets worse, xxhash (for HashBySerialize) and LZ4 (FastCompress) are now in Core too.

Mirek
Re: How to distribute some parts of Core in another library? [message #46894 is a reply to message #46893] Thu, 08 September 2016 09:14 Go to previous messageGo to next message
koldo is currently offline  koldo
Messages: 3355
Registered: August 2008
Senior Veteran
Quote:
BTW, for app released, there is now a nice tool "File/Project licenses", which scans packages and creates a complete list of licenses used...
Cool Cool


Best regards
Iñaki
Re: How to distribute some parts of Core in another library? [message #46895 is a reply to message #46894] Thu, 08 September 2016 10:19 Go to previous messageGo to next message
cbpporter is currently offline  cbpporter
Messages: 1401
Registered: September 2007
Ultimate Contributor
Licenses are far too complex for sure.

Anyway, for now I included 4 LICENSE text files in the project + MINGW.

One, is for the library which is OSS and the original object of the discussion. This is Apache License 2.0.

I believe Apache can be combined with U++ licenses?

The library does not use U++, but it does include the CParser inspired class that I want to distribute.

So can you confirm that this scenario is OK?

Then I have 3 executables, which for now are not OSSed, but will be someday. They all use the library and are U++, so I took the Apache License and added all the content form File/Project licenses, obtaining 3 different LICENSE text files, one for each executable, because they use different packages. These are bundled in the distribution.

Then, there is the MINGW package, which includes all the original COPYING and README files.

Next, I need to figure out how to do the same for Clang because I would like to package that too.
Re: How to distribute some parts of Core in another library? [message #46896 is a reply to message #46895] Thu, 08 September 2016 10:56 Go to previous messageGo to next message
mirek is currently offline  mirek
Messages: 13975
Registered: November 2005
Ultimate Member
Are there at least 4 lines of code identical to CParser? If not, you do not need to copy any license by my standards (although some line "Inspired by U++ CParser in the code would be nice...)
Re: How to distribute some parts of Core in another library? [message #46897 is a reply to message #46896] Thu, 08 September 2016 11:13 Go to previous messageGo to next message
cbpporter is currently offline  cbpporter
Messages: 1401
Registered: September 2007
Ultimate Contributor
mirek wrote on Thu, 08 September 2016 11:56
Are there at least 4 lines of code identical to CParser? If not, you do not need to copy any license by my standards (although some line "Inspired by U++ CParser in the code would be nice...)

Hard to tell Surprised.

You be the judge of that!

def IsChar(c1: Char, c2: Char, c3: Char): Bool; const {
	return term[0] == c1 && term[1] == c2 && term[2] == c3;
}


bool   IsChar3(char c1, char c2, char c3) const { return term[0] == c1 && term[1] == c2 && term[2] == c3; }


On paper it might not be identical. But logically it is...
Re: How to distribute some parts of Core in another library? [message #46898 is a reply to message #46897] Thu, 08 September 2016 11:22 Go to previous messageGo to next message
mirek is currently offline  mirek
Messages: 13975
Registered: November 2005
Ultimate Member
I do not see identical lines:)

Mirek
Re: How to distribute some parts of Core in another library? [message #46899 is a reply to message #46898] Thu, 08 September 2016 11:44 Go to previous messageGo to next message
cbpporter is currently offline  cbpporter
Messages: 1401
Registered: September 2007
Ultimate Contributor
mirek wrote on Thu, 08 September 2016 12:22
I do not see identical lines:)

Mirek

Surprised

Thank you!

OK, but for now I'm NOT including this file yet. May include it later or might move it to the U++ enabled code, and then there is no problem with licensing. In that content it might count as a fork.

And speaking of licensing, I removed MINGW from the package and will not include Clang. I packaged MINGW separately, in its own archive, and will rely on auto-detect for Clang. From Program Files/LLVM.

And started reading:
http://www.oreilly.com/openbook/osfreesoft/book/index.html
Re: How to distribute some parts of Core in another library? [message #46995 is a reply to message #46899] Wed, 12 October 2016 16:07 Go to previous messageGo to next message
cbpporter is currently offline  cbpporter
Messages: 1401
Registered: September 2007
Ultimate Contributor
How do you feel about me forking U++ to reduce .so usage to a minimum and NOGTK flag? Smile

Is NOGTK still supported?
Re: How to distribute some parts of Core in another library? [message #46996 is a reply to message #46995] Wed, 12 October 2016 17:11 Go to previous messageGo to next message
mirek is currently offline  mirek
Messages: 13975
Registered: November 2005
Ultimate Member
cbpporter wrote on Wed, 12 October 2016 16:07
How do you feel about me forking U++ to reduce .so usage to a minimum and NOGTK flag? Smile

Is NOGTK still supported?


Sure go on.

Actually, it might be fun if some serious fork existed.

Mirek
Re: How to distribute some parts of Core in another library? [message #48463 is a reply to message #46996] Wed, 05 July 2017 16:50 Go to previous messageGo to next message
cbpporter is currently offline  cbpporter
Messages: 1401
Registered: September 2007
Ultimate Contributor
OK, I've been googling like crazy but still don't get OSS licenses. Even the best of sites with info don't explain stuff as if I neither understand or care about licenses.

So what is the difference between the license of a package and the license of its dependencies.

Here is a simple example: Let's say I create my package Foo that uses U++. I need to:

1. Select a license for it.
2. Make sure it is compatible with all the dependencies, i.e. the packages used from U++.

At this point lets say Foo goes under MIT.

I want to put Foo in GitHub. In gitHub , I select the MIT license.

So at this point my project has MIT license, or MIT + about 4 other that come from U++? Some I can't even recognize, some are BSD. Are all these BSD licenses the same?

Where do I put my own license and where do I put U++ licenses. In the github repo. How about in the pure binary distribution.

How do I determine the copyright year and do I need to register somewhere as a copyright owner?

Can I change licenses after the first release?

God, the world of OSS license is a clusterfuck. I need an explanation as clear as 1 + 2.

Re: How to distribute some parts of Core in another library? [message #48465 is a reply to message #48463] Wed, 05 July 2017 18:38 Go to previous messageGo to next message
mirek is currently offline  mirek
Messages: 13975
Registered: November 2005
Ultimate Member
AFAIK (and as far as I care):

Foo has a license and it ends there.

Now if you create an application (where you do have multiple packages, each with its own license), that is the point you should start investigating whether licenses are 'compatible' and what are requirements.

In U++, only packages that are allowed to be used freely in commercial application without the requirement to provide sources are allowed to upp.src (there used to be an exception, but that was just helper package for theide, so no impact on applications created). Anyway, you still should check requirements.

TheIDE even has a tool for it: File/Project licenses...

Re: How to distribute some parts of Core in another library? [message #48469 is a reply to message #48465] Thu, 06 July 2017 00:48 Go to previous messageGo to next message
cbpporter is currently offline  cbpporter
Messages: 1401
Registered: September 2007
Ultimate Contributor
So a package has its own license and that's it.

And you should check compatibility, but beyond that you shouldn't care about dependencies?

So far I've done only independent OSS (no dependencies) or non-OSS binary distributions (lumped every single U++ license in a single file called license.txt).
Re: How to distribute some parts of Core in another library? [message #48470 is a reply to message #46881] Thu, 06 July 2017 03:22 Go to previous messageGo to previous message
mr_ped is currently offline  mr_ped
Messages: 825
Registered: November 2005
Location: Czech Republic - Praha
Experienced Contributor
Generally speaking MIT/Apache/BSD type of license allows you basically anything, just a credit in documentation is desirable.

GPL requires you to publish modified sources. But only to your customers, doesn't mean you must provide them as free download on Internet for everyone.. but the very first customer who will download it may freely post it on Internet, if he wish so, so count GPL as "must publish src". Also if you use just small library under GPL, it will "infect" the whole app src with the license, so you must publish the whole source, not just that small library.

LGPL, when used for some library, and you link the library dynamically from your app, does NOT require you to publish src of your app, only the source of the library is enough. When linked statically, IIRC it means you have to publish also app src.

That's how I understand the OSS licenses, this is of course not a lawyer quality advice...
Previous Topic: stable sort bug.. or looks like it
Next Topic: Sys command truncates captured console output
Goto Forum:
  


Current Time: Fri Mar 29 02:41:23 CET 2024

Total time taken to generate the page: 0.01219 seconds