fontforge / libspiro

Spiro is the creation of Raph Levien. It simplifies the drawing of beautiful curves. (Migrated here from libspiro.sourceforge.net on 2013-04-20)
GNU General Public License v3.0
107 stars 25 forks source link

Have ported to Haxe #16

Closed nanjizal closed 4 years ago

nanjizal commented 7 years ago

Hi just letting you know I have ported the code to Haxe so it should now be very cross platform ( haxe supports php7, c++, hashlink ( c and c vm ), neko vm, javascript, flash, c#, java, python, lua ). https://lib.haxe.org/p/hxSpiro/0.0.1 The demo is still rather rough uses svg javascript but allows you to place points or move them, it should be fairly easy to rebuild for cross target Haxe libraries like NME/Openfl etc.. Feedback welcome, I need to check if enabling some of the commented out inlines would speed up further, but the js test seems fairly responsive. Let me know if a pull request might be suitable and what form it might take, but seems fine for it to be separate, but thought it might interest you.

JoesCat commented 7 years ago

Hi @nanjizal, Thanks for catching our attention - very much appreciated.

If there are any patches you would like to push upstream, please consider doing so. It may improve libspiro itself, and can help make it easier to progress without dealing with fragmenting directions.

nanjizal commented 7 years ago

Joe Thought you might be interested I have created demo use with Kha ( WebGL, Android, IOS etc.. ) and also with Haxe javascript WebGL ( or SVG, Canvas ) using my experimental library justTriangles eg: WebGL codepen online demo Demo githubs are linked in the readme. hxSpiro The experimental code to allow GPU graphics is used elsewhere so MIT licensed. I am not really expert in use of Spiro, if you have suggestions on how specifically I should improve the demo's please let me know. Really sad Levin does not allow MIT on Spiro as I can see the library being used on many games if the license was more permissive :( Best Nanjizal

nanjizal commented 7 years ago

If you would like me to create a Swing Java demo version using hxSpiro, or other Java approach please let me know, or could try something for one of the other Haxe targets... PHP7, C#, Lua, Python etc... although no doubt the Kha version should have quite a bit of coverage targeting Unity, Flash, Java, c++, hashlink etc...

nanjizal commented 7 years ago

Really you should update the readme

Two methods of using libspiro in your programs

Since you can now Spiro in many common languages via the other repositories above and hxSpiro.

JoesCat commented 7 years ago

Thanks for the update. Will look at it later, but at the moment, got several things to do first.

JoesCat commented 4 years ago

libspiro is at 1.0+, closing this issue.

nanjizal commented 4 years ago

Raph has allowed me to release under MIT. https://github.com/nanjizal/hxSpiro2019/ Haxe now allows functions outside classes, this is now the latest Haxe version of Spiro and licensed as MIT, will work in js, java, python, c++ etc... it lacks examples, but if anyone is interested please contact me and I will assist. https://github.com/nanjizal/hxSpiro2020/

JoesCat commented 4 years ago

Hi @nanjizal, I took a quick look at hxSpiro2019, and seeing it originated from 2016 code, you still need to retain the GPL3+ license. https://github.com/nanjizal/hxSpiro2019/issues/1 your 2020 code also has the same problem - originating from libspiro 2016 code too.

davelab6 commented 4 years ago

I think Raph is offering non-GPL licenses more recently, though

JoesCat commented 4 years ago

Understood. However, this code is still based on libspiro code - not spiro code.

jamadagni commented 4 years ago

Hi. Please clarify what is the difference between libspiro and spiro code you mean.

On Tue, 29 Sep, 2020, 09:08 Joe, notifications@github.com wrote:

Understood. However, this code is still based on libspiro code - not spiro code.

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/fontforge/libspiro/issues/16#issuecomment-700406366, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAHHPSXDQPRHZBD53OW65DTSIFJDXANCNFSM4C2V5FNQ .

nanjizal commented 4 years ago

My port was never based on libspiro it was derived from multiple language implementations of Spiro and significantly changed to take advantage of many Haxe features it's a different programming language, if Raph is happy for me to release a MIT version, and I am happy then I think that's fine. This seemed quite interesting on the topic.. https://opensource.stackexchange.com/questions/9557/upstream-re-licensing-project-from-gpl-3-0-to-mit-allowed

ctrlcctrlv commented 4 years ago

Here is the history as I understand it.

In around 2007, @raphlinus (Raph Levien) published C code online which implemented Spiro. His code however was not easily linked to as a library. Its main purpose was running the GTK 1 plate application.

George Williams, who at that time was still around and actively developing FontForge, took a liking to the code and made it optionally linkable as a library in FontForge. To achieve this he made many changes to the then GPL 2 licensed code.

Raph changed the original code to MIT.

George Williams is no longer contactable to my knowledge. Meaning the code is not relicensable. It is without doubt that Williams would be very happy to relicense the code in my mind. But this is not a legal argument.

So, anything based on libspiro must be GPL; anything based on Raph's Spiro, MIT or GPL or any compatible license.

Please feel free to correct me if I'm wrong.

ctrlcctrlv commented 4 years ago

Oh and of course let's not forget all the GPL2/3 licensed changes made since then by @JoesCat

nanjizal commented 4 years ago

removed

ctrlcctrlv commented 4 years ago

Hi I'm sorry I don't think you needed to remove it and I think you're blaming the wrong person here

This isn't Joe's fault. It's nobody's fault that George is no longer contactable. He can't legally change the license of this code because George isn't here to say that's okay.

If you don't want to accept the GPL I don't know what to tell you, I think George is still alive you could try to contact him

I don't think Joe would have a problem with relicensing. George is the one that we can't contact

nanjizal commented 4 years ago

hxSpiro2019 was released to provide MIT without examples or motivation for me to create some it's probably not going to be used, so it was removed under practical grounds. hxSpiro is still online and has example code. Perhaps hxSpiro JVM may run faster than libspiro java version, if you run into compiler errors getting setup against latest Haxe then I can take a look but not working in software these days.

ctrlcctrlv commented 4 years ago

I see. I'm sorry that you were under this impression but I just want you to know that Joe is not your enemy here. It is an unfortunate effect of history that this repository is GPL and nothing else, and if you do manage to reach out to George and if he does agree to come on here and write something to that effect I imagine Joe would be happy to do the same for his contributions. But I have not heard from George now in many years and I don't know when is the last time anyone has heard from him.

nanjizal commented 4 years ago

It was based mostly on the js and c# which both did not have GPL license when originally I started porting, I found this java version not really cleanly enough structured to port easily, and only useful for examples. My code was more a port of the algorithm the actual code structures were widely adjusted, but there is no point in code that has uncertain MIT status. I could probably port Raph's Python code now I understand a bit more python but I know it takes a lot of time, and spiro is quite problematic to create curves with anyway.

ctrlcctrlv commented 4 years ago

I very much disagree with the assertion that Spiro is difficult. Absolutely if you do not understand how it works and the different types of points and what's available to you you are going to struggle. But I use it in every single one of my fonts not even joking. Some of my fonts I start with a Spiro and then I go over it. TT2020, every base outline before roughening is a Spiro spline set. So I would prefer that you not disparage it because I usually find that that's coming from a place of ignorance and not genuine understanding of the benefits and drawbacks of Spiro...

Happy to teach you how to draw with it, I have a tutorial on my YouTube channel actually. Just search "FontForge Spiro", channel name "copy paste"

nanjizal commented 4 years ago

its more that it can be a bit unstable at certain points, I believe newer algorithms avoid this completely, although I made various examples to allow simple drawing with the algorithm the license always stopped my interest in developing them more fully but I did experiment a lot at the time.

nanjizal commented 4 years ago

hxTrueType is MIT although doubtfully has wealth of features of FontForge.

davelab6 commented 4 years ago

I agree with Joe and Fred

JoesCat commented 4 years ago

@davelab6 wrote, I think Raph is offering non-GPL licenses more recently, though

@nanjizal provides the answer with this reference: https://opensource.stackexchange.com/questions/9557/upstream-re-licensing-project-from-gpl-3-0-to-mit-allowed "MIT licensed software can be re-licensed as GPL software, and integrated with other GPL software, but not the other way around."

@jamadagni wrote Hi. Please clarify what is the difference between libspiro and spiro code you mean.

There is code in libspiro and HxSpiro written by other authors. HxSpiro was created in 2016 and at that time spiro was also GPL. In 2016, it is very doubtful anyone would think to use 2007 code to create a spiro library when libspiro already existed (plus a Java translation). For @nanjizal to magically state his code is now based only on the 2007 spiro code alone is incorrect - you also do not need to look far to see libspiro code and solutions included.

@ctrlcctrlv wrote: Oh and of course let's not forget all the GPL2/3 licensed changes made since then by @JoesCat

I was okay with GPL2+. However, GPL2+ allows for GPL3+, and this topic started here: Upgrade to GPLv3+, as per "[Fontforge-users] Spiro -> GPLv3+?" See http://sourceforge.net/mailarchive/message.php?msg_id=30930902 Also more info here too: https://github.com/fontforge/libspiro/issues/8

There was concern about the patent, therefore libspiro still continues to mention the patent requirement even in 2020 even if Raph dropped this requirement in 2019.

@ctrlcctrlv wrote: George Williams is no longer contactable to my knowledge. Meaning the code is not relicensable. It is without doubt that Williams would be very happy to relicense the code in my mind. But this is not a legal argument.

I have my doubts. Reading earlier docs, I'm under the impression George wanted BSD3 while Raph wanted GPL2+, and George had to write libspiro as an optional (non-required) library to make use of spiro functions. Merging spiro code would have been much easier and simpler.

What we can agree on is: George only needs to remain silent to maintain GPL2+ or GPL3+ George's last posting is march2019 AFAIK, so I'll assume his code is copyright until 2089.

@nanjizal wrote: I could probably port Raph's Python code now I understand a bit more python but I know it takes a lot of time, and spiro is quite problematic to create curves with anyway.

The Java code has remained mostly the same since 2009. The C code fixes have not been ported over yet.

removed

It would have been easier for you to patch your code and then ask downstream to update.

Please contact your downstream forks and ask them to please change to GPL3+. It is a small number of forks, but Raph can help you. Raph helped you implement HxSpiro2019 and HxSpiro2020 as MIT licensed. https://github.com/raphlinus/hxSpiro2019/network https://github.com/raphlinus/hxSpiro2019/commit/3a9c0f5f0834d6a641b7c842953cad5addd45b2b

@nanjizal - in future, for you to avoid this problem - please read a few links here: why copyright? : https://www.google.com/search?q=why+copyright+is+important

Here is a link to a university - so I think they would be thoughtful and careful to write this - which is better than a stackoverflow opinion: https://www.lib.purdue.edu/uco/CopyrightBasics/basics.html Why is copyright law important?

What cannot be copyrighted?

How long does copyright last?

and then try a few links here: https://www.google.com/search?q=what+is+a+software+license ...but this seems okay for this topic - "5 types of software licenses you need to understand": https://www.synopsys.com/blogs/software-security/5-types-of-software-licenses-you-need-to-understand/

In the meantime, I have requested Raph to fix his ReadMe file to avoid this happening again. https://github.com/raphlinus/spiro/issues/1

ctrlcctrlv commented 4 years ago

George only needs to remain silent to maintain GPL2+ or GPL3+ George's last posting is march2019 AFAIK, so I'll assume his code is copyright until 2089.

This is absolutely correct. We can know that George was a BSD proponent but that doesn't have any legal meaning at all. This specific code, he worked on as GPL, and his work can't become BSD without him declaring it so. We cannot know his wishes any other way in a way that would satisfy a lawyer.

JoesCat commented 4 years ago

Thank you Raph. Everyone is proud of their work and it is a shame to see their projects go to waste due to misunderstandings.

nanjizal commented 4 years ago

I have request Raph removes his fork of my lib hxSpiro2019, there is little point in 3 unmaintained unused hxSpiro versions ( Haxe users never seem to use GPL libraries in projects ), so I have left only my original GPL licensed one. I have no interest in adding a patent they are not relevant in Europe and I have no interest in encouraging their adoption. But if hxSpiro needs any license tweaks feel free to pull.

davelab6 commented 4 years ago

On Sun, Oct 4, 2020, 12:46 AM Joe notifications@github.com wrote:

@davelab6 https://github.com/davelab6 wrote, I think Raph is offering non-GPL licenses more recently, though

@nanjizal https://github.com/nanjizal provides the answer with this reference: https://opensource.stackexchange.com/questions/9557/upstream-re-licensing-project-from-gpl-3-0-to-mit-allowed "MIT licensed software can be re-licensed as GPL software, and integrated with other GPL software, but not the other way around."

This is not true at all.

Mit licensed work is compatible with the gpl terms and so can be integrated into a derivative/combined work wholly re-distributed under the gpl terms, by a licensee, but the original mit work remains so.

However, a copyright holder can distribute (not re-distribute) under any license, multiple times. That's what Raph is doing.

But him offering a different license over work he holds a copyright on doesn't change the copyright license status of a derivative work with other copyright holders' contributions, which is the case of libspiro.

nanjizal commented 4 years ago

Well I should be clear that hxSpiro core ( rather than example use ) was not direct based on libspiro, but indirect, so much of the code relating to libspiro copyright contributions are probably not even in hxSpiro given it was translated via two other languages so much of the algorithm survives but lots of the other stuff will be totally different as I stripped out non essentials and change most of the data structures. But anyway the MIT version have been removed and sadly no one will likely find much use now as Haxer's just avoid GPL like the plague despite making lots of opensource code probably more cross over of commercial and open code in Haxe community than most programming language communities, but totally understand that I need to re-port if I want to release MIT. So I don't think there is more to say on this issue.

JoesCat commented 4 years ago

@davelab6 - I should have caught that. Just did a copy/paste. Replacing the word "as" with "with" will be closer. "MIT licensed software can be re-licensed with GPL software, and integrated with other GPL software, but not the other way around."

Thanks @nanjizal - sorry it has to be that way, and now you may understand why Haxer's avoid GPL like the Plague - because MIT allows you to create closed source, while GPL requires you to provide source code. GPL code cannot be part of MIT code, but MIT code can be part of GPL code.

FYI - Why Copyright? is an interesting thing - Governments are supposed to take care of their people, and one way to do that is education, but to do that, you need people that know something to share that something, while at the same time preventing others from simply ripping-off those same providers of information. Re-posting GPL as MIT, and then going closed-source, is basically returning to the prior times of ripping-off code, but then also losing that acquired knowledge (from many, back to only a select few, or possibly nobody) - you might as well be burning books.

nanjizal commented 4 years ago

I try to publish all my opensource work under MIT where possible, if there is any ( non-ports ) that interest you that you would like me to re-publish to have another version with GPL license then do let me know. https://github.com/nanjizalLibraries/nanjizalHaxe/blob/master/README.md

Currently I have given up getting a creative developer role despite many years animating and developing flash and AIR projects, so I am certainly not on some mission to steal GPL code as I don't even work in code currently. I moved to using Haxe because it was fully opensource language not connected to any manimpulative corporation that would kill it tomorrow, or mess it up like Oracle seem to be doing with Java. Most roles seem to require commercial experiance with a corporate approved language ( and ones they have not killed ), and companies do not seem to consider people who could probably code any language, so instead I am labouring for some roofers, which is why I doubt I have time to try to put more time into more ports. So I have no agenda to steal GPL code, Raph suggested I republish it as he had changed his license and I neither of us thought deeper, I was more thinking about changing it to use module level functions which I am using a lot.

JoesCat commented 4 years ago

Let's assume you had 10, 50, or 100+ forks downstream of the previously incorrectly licensed code, and one or more of the forks assumed the license as genuinely MIT. The outcome would still be the same, but you would have had a larger problem to resolve - including downstream forks possible claiming lost income, damages, etc, etc, etc. - you wouldn't want to be "that_guy" holding the smoking gun.

You made an error - Raph too. You did not run from this problem, and you made a best effort to correct this problem. That shows character. I think that is all okay and corrected now. You are now also a bit wiser about Copyright and Licenses as well. Done. Time to continue onwards.

I try to publish all my opensource work under MIT where possible, if there is any ( non-ports ) that interest you that you would like me to re-publish to have another version with GPL license then do let me know.

If you want to publish and even improve libspiro, you are free to do so, but respect the copyright, and respect the license - as GPL3+

Last but not least, for everything else. Check the Copyright, check the licenses, check the code history.