Jump to content

Suggestions for open sourcing an application


Recommended Posts

Hi gang,

I have been working on an application recently and as an experiment I am thinking about open sourcing the whole shebang.

Highlights of the application are as follows:

  • Multiple camera vision inspection and analysis
  • Analysis of images using traditional NI Vision and also GPU accelerated TensorFlow
  • Storing of detected objects in a SQL DB
  • Serving up access to this DB via a simple WebService
  • NXG WebVI implementation of a simple data dashboard
  • Uses my home grown lightweight actor framework (not NI AF) and includes a simple subpanel based GUI and a bunch of other convenicence stuff (like logging and error handler actors)

All in all, there are probably some parts of the application that may be of interest to others. It is a medium size application (50 classes, 700 VIs)

Now, I have a few problems... 

  1. I never intended for the application to be open sourced, so none of the VIs have license notices or anything like that.
  2. I have very little experience with choosing open source licenses. Essentially I don't really care what anyone else does with my stuff as long as I cannot be sued if something goes wrong and maybe if they make some money off it they buy me a beer some day
  3. I have been developing my framework for quite a long time, and as my personal style is to only comment stuff that is not obvious to infer from the code new users will probably find the documentation quite lacking. I do not have the time or energy to actually support this thing very much (I have a four year old and a six year old...). So it would be a gift to the community but not something I could regularly help others with, and I am not sure if this will end up making me look like a terrible person.
  4. I can not really just make public my GitHub repository for my actual commercial project as it contains a bunch of stuff my customer would probably not want in the public domain, so I would need to make a new publically consumable version which will take considerable effort
  5. I use a commerical third party toolkit for the TensorFlow stuff, and so without a license nobody else would be able to run any of the object detection stuff. I could convert this back to the NI Vision TF API if need be.

I am happy to do (4 and 5) if there is interest in this.

Does anyone think this is something of value?

Edited by Neil Pate
Link to comment

Absolutely. I'd be interested in examples of good open source practice for G code. My feeling is that there should be some way to visualize the diagrams as PNGs (not necessarily snippets) for those not having access to the proper LV version (or LV period) to be able to "see" the code. Last time I checked, the "print" diagram function of LV was useless for that purpose.

Link to comment
2 hours ago, Neil Pate said:

I never intended for the application to be open sourced, so none of the VIs have license notices or anything like that.

There is an option to mass-edit VI documentations in VIPM, although it's probably not the right tool. Maybe you can hack a solution. I don't recall if there is a function for this in the OpenG libraries, but they all have license notices and I would be surprised if they were edited by hand.

2 hours ago, Neil Pate said:

I have very little experience with choosing open source licenses. Essentially I don't really care what anyone else does with my stuff as long as I cannot be sued if something goes wrong and maybe if they make some money off it they buy me a beer some day

There is a tool for that (of course): https://choosealicense.com/

2 hours ago, Neil Pate said:

I have been developing my framework for quite a long time, and as my personal style is to only comment stuff that is not obvious to infer from the code new users will probably find the documentation quite lacking. I do not have the time or energy to actually support this thing very much (I have a four year old and a six year old...). So it would be a gift to the community but not something I could regularly help others with, and I am not sure if this will end up making me look like a terrible person.

If you don't want to accept contributions or issues for your repository, make it an archived (read-only) repository or put a notice in your readme file (anyone is free to fork and change it anyway). There is a blog post on how to do it on GitHub: https://github.blog/2017-11-08-archiving-repositories/

2 hours ago, Neil Pate said:

Does anyone think this is something of value?

Vision is not my area of interest, so I wouldn't use it as a product, but I like to browse projects to learn about problem solving strategies and perhaps find a few nuggets. Don't worry about style or documentation, especially if it's a gift. I'm sure there are a few people on LAVA that are more than happy to get something new to fiddle with 🙂

Link to comment

I don't really want to hand edit 700 VIs. As I said, if I do release it I really don't mind what others do to it. Sorry my question was a bit vague, I actually wanted to ask if I *have to* put a license on every VI. I would be more than happy just putting the "do whatever you want" license (probably MIT License) on the GitHub page if that was sufficient for me to not get sued if someone's heart lung machine stops working due my code.

Edited by Neil Pate
Link to comment

It is up to the user to take "reasonable steps" to find the license. Keeping license notice in each file helps, especially when someone uses part of your code to create something else, and files with multiple licenses are mixed. Such situations are good to avoid, but if someone takes the code, he/she should check licensing and provide proper information in the derivative work.

This is what you will actually find in GNU FAQ, though they make a big issue out of the derivative works:

https://www.gnu.org/licenses/gpl-faq.en.html#NoticeInSourceFile

 

To modify a lot of VIs, you may use pylabview - if you know how to use use python or bash, you can make a batch to extract, modify and re-create any amount of RSRC files with it.

You only need to make the script which does the modification, ie. add the documentation to one file, and compare extracted XML before and after the modification to get a patch to be applied to all other files.

 

For the selection - if you don't mind others using it for anything, MIT is a good choice. Though sometimes people say that, and then still feel cheated when someone makes modification to the work and starts making money out of it... if you feel unsure here, you may choose GPL instead.

And if you completely don't care about license and want to mock it a bit, there's always DBAD - it's quite popular for underground tools.

 

 

Edited by Mefistotelis
  • Haha 1
Link to comment
1 hour ago, Neil Pate said:

I don't really want to hand edit 700 VIs. As I said, if I do release it I really don't mind what others do to it. Sorry my question was a bit vague, I actually wanted to ask if I *have to* put a license on every VI. I would be more than happy just putting the "do whatever you want" license (probably MIT License) on the GitHub page if that was sufficient for me to not get sued if someone's heart lung machine stops working due my code.

Not a lawyer but I'm pretty sure all of the open source projects that the NI systems engineering group maintains just have the license in the repo's root. My understanding is that no license means you have no permission to use the software (https://choosealicense.com/no-permission/) so I can't imagine you could get sued for someone using a VI without a license because the default would be that they were never able to use that VI in the first place.

 

23 minutes ago, Mefistotelis said:

And if you completely don't care about license and want to mock it a bit, there's always DBAD - it's quite popular for underground tools.

Never heard of this one before but I might just use that for some of my GitHub repos. I feel like the only reason I put a license in any of my repos is to explicitly state that I really don't care.

Link to comment
1 hour ago, Mefistotelis said:

It is up to the user to take "reasonable steps" to find the license. Keeping license notice in each file helps, especially when someone uses part of your code to create something else, and files with multiple licenses are mixed. Such situations are good to avoid, but if someone takes the code, he/she should check licensing and provide proper information in the derivative work.

This is what you will actually find in GNU FAQ, though they make a big issue out of the derivative works:

https://www.gnu.org/licenses/gpl-faq.en.html#NoticeInSourceFile

 

To modify a lot of VIs, you may use pylabview - if you know how to use use python or bash, you can make a batch to extract, modify and re-create any amount of RSRC files with it.

You only need to make the script which does the modification, ie. add the documentation to one file, and compare extracted XML before and after the modification to get a patch to be applied to all other files.

 

For the selection - if you don't mind others using it for anything, MIT is a good choice. Though sometimes people say that, and then still feel cheated when someone makes modification to the work and starts making money out of it... if you feel unsure here, you may choose GPL instead.

And if you completely don't care about license and want to mock it a bit, there's always DBAD - it's quite popular for underground tools.

 

 

Never heard of that license. It pretty accurately sums it up though. Thanks!

Link to comment
7 hours ago, Neil Pate said:

I don't really want to hand edit 700 VIs. As I said, if I do release it I really don't mind what others do to it. Sorry my question was a bit vague, I actually wanted to ask if I *have to* put a license on every VI. I would be more than happy just putting the "do whatever you want" license (probably MIT License) on the GitHub page if that was sufficient for me to not get sued if someone's heart lung machine stops working due my code.

If I'm not mistaken, this is a gray area because no court or judge has ever contemplated this question before.

The general broad understanding is "No, it's not a strict requirement, but there are reasons to do so": https://softwareengineering.stackexchange.com/questions/125836/do-you-have-to-include-a-license-notice-with-every-source-file

 

11 hours ago, Neil Pate said:

I use a commerical third party toolkit for the TensorFlow stuff, and so without a license nobody else would be able to run any of the object detection stuff.

That's OK. It's a bit like the Ur-Quan Masters project -- The code is open-source, but not everyone can play it with the non-open-source 3DO assets unless they already own a copy: https://wiki.uqm.stack.nl/The_Ur-Quan_Masters_Technical_FAQ#How_do_I_use_the_3DO_intro_and_victory_movies_in_the_game.3F

Anyway, by making your part open-source, you already make it much easier for others to achieve the object detection stuff!

 

6 hours ago, Mefistotelis said:

And if you completely don't care about license and want to mock it a bit, there's always DBAD - it's quite popular for underground tools.

Here's an even shorter and blunter license: http://www.wtfpl.net/about/ (altough you might be less likely to receive a pint when someone becomes rich from your work)

 

11 hours ago, Neil Pate said:

I can not really just make public my GitHub repository for my actual commercial project as it contains a bunch of stuff my customer would probably not want in the public domain

Note: "Public domain" has a specific meaning in copyright law, and it doesn't just mean "viewable by the public". If a work is said to be in the "public domain", that means either copyright has expired, or its authors have formally renounced their claim to copyright.

As @jacobson said, a piece of code can be publicly viewable but the viewers might not have permission to incorporate the code into their own work.

If you want to disclaim copyright (as opposed to using a license that says "I own this code, but you can do whatever you want with it"), see https://unlicense.org/

 

6 hours ago, Mefistotelis said:

o modify a lot of VIs, you may use pylabview - if you know how to use use python or bash, you can make a batch to extract, modify and re-create any amount of RSRC files with it.

You only need to make the script which does the modification, ie. add the documentation to one file, and compare extracted XML before and after the modification to get a patch to be applied to all other files.

You can do it all in LabVIEW itself:

append-notice-to-vi.png.2222103705a7e4a599cb2161f70e24e9.png

Edited by JKSH
  • Like 1
Link to comment
10 hours ago, Neil Pate said:

As I said, if I do release it I really don't mind what others do to it.

  • Are you okay with people using your work and selling it as their own, perhaps making a lot of money with it?
  • Do you want to be attributed for your work, if someone uses it in their project (or sell it as their own)?
  • Are you okay with other people using your name to sell your work as their own?

In my opinion BSD 3-Clause is a good choice if you want to be attributed without any liability or warranty. Look at SQLite Library and JSONtext for reference (they use BSD 2-Clause). Note that BSD 3-Clause is the same as BSD 2-Clause, but "with a 3rd clause that prohibits others from using the name of the project or its contributors to promote derived products without written consent."

Unlicense puts your work into public domain, so there is no copyright holder. You also don't reserve any rights to your own work (anyone can do whatever with it).

MIT is in some ways similar to BSD but without the need for attribution. It is a pretty popular choice though.

DBAD and WTFPL need to be placed in every source file, because they apply to single files only. They also don't really address the issue. If an author didn't want anyone to sell their work as their own, they probably shouldn't place it under public domain in the first place. I'm always surprised by people who make their work open source or public domain and then complain if other people use it. What did they expect?

Link to comment
1 hour ago, LogMAN said:
  • Are you okay with people using your work and selling it as their own, perhaps making a lot of money with it?
  • Do you want to be attributed for your work, if someone uses it in their project (or sell it as their own)?
  • Are you okay with other people using your name to sell your work as their own?

In my opinion BSD 3-Clause is a good choice if you want to be attributed without any liability or warranty. Look at SQLite Library and JSONtext for reference (they use BSD 2-Clause). Note that BSD 3-Clause is the same as BSD 2-Clause, but "with a 3rd clause that prohibits others from using the name of the project or its contributors to promote derived products without written consent."

Unlicense puts your work into public domain, so there is no copyright holder. You also don't reserve any rights to your own work (anyone can do whatever with it).

MIT is in some ways similar to BSD but without the need for attribution. It is a pretty popular choice though.

DBAD and WTFPL need to be placed in every source file, because they apply to single files only. They also don't really address the issue. If an author didn't want anyone to sell their work as their own, they probably shouldn't place it under public domain in the first place. I'm always surprised by people who make their work open source or public domain and then complain if other people use it. What did they expect?

Bullet 1: yes that is fine. I really don't expect anyone to get rich from it, if they do I would hope they would feel bad enough to give me something back (but if they didn't this would not bother me too much).

Bullet 2: That would be nice, but given the nature of this community I would be quite surprised if it happened enough to worry about

Bullet 3: No, that I don't want.

BSD-3 sounds like a good compromise.

My understanding of the industry after being in it for approaching 20 years is that nobody gets rich quickly and without a lot of hard work. I doubt any of the toolkits on the Tools Network have made anywhere near enough money to justify all the effort required to put them there.

Link to comment

As someone that sometimes publishes open source code, I generally choose the most permissive license I can because I basically only want the code to be shared and I don't mind the rest. I had started using the Unlicense for all my work but realized that it's not OSI-approved (and apparently some countries don't recognize Public Domain as a thing), so I fell back on Zero-clause BSD. https://opensource.org/licenses/0BSD

You know, if someone wants to use my name to advertise their stuff, I am not sure I would mind. I guess if they misuse my name in some way, I could sue them for that anyhow. But it's not like they'd build a rocket launcher and say that my code powers it, therefore it's bound to work correctly, right?

As for the copyright notice on every front panel, block diagram or VI descriptions: please don't do that. 🙂 It just multiplies by 2 the time it takes to compile your packages. Useless, unproductive, annoying and of no legal value. (IMO anyway)

 

  • Like 1
Link to comment
4 hours ago, Michael Aivaliotis said:

Was this developed for a customer, with the understanding that you would make it open-source? If it was done under a "work for hire" agreement then there might be a problem of ownership.

It was not done under a work-for-hire arrangement, the product is completely my own IP (apart from the third-party toolkits I use of some of which are closed-source).

Thanks for all the advice everyone. I do want to release this now I just need to find time to tidy up and strip out stuff I cannot distribute.

Link to comment
On 5/10/2020 at 5:34 AM, JKSH said:

That's OK. It's a bit like the Ur-Quan Masters project -- The code is open-source, but not everyone can play it with the non-open-source 3DO assets unless they already own a copy: https://wiki.uqm.stack.nl/The_Ur-Quan_Masters_Technical_FAQ#How_do_I_use_the_3DO_intro_and_victory_movies_in_the_game.3F

Anyway, by making your part open-source, you already make it much easier for others to achieve the object detection stuff!

 

Funny you should mention that...

 

Link to comment

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.