Source code version number policy [closed] - versioning

Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 7 years ago.
Improve this question
I need a guideline or procedure which describe the version number policy for source code as per changes happened(major, minor, Micro), assigning particular version to release, labeling e.t.c
Your guideline in this regards will be highly appreciated....

You have some public interesting guidelines to get you started:
IBM Rational products
Eclipse
OSGi and version numbering in general
Java Sun version numbering

You might want to look at the Wikipedia article relating this, here it is:
http://en.wikipedia.org/wiki/Version_number

I've always been a fan of the way the Apache folks handle versioning. The Subversion people also adopted a variation of it (can't find the link since they moved web sites), which makes for a consistent, easy to understand methodology.

Semantic Versioning is a simple but rigorous and complete method of managing version numbers. It defines a format like
major.minor.patch
For example, 1.0.0 or 2.1.2. Note that all three primary components are always present, and the components are never padded with zeros.
There is an optional pre-release component like
major.minor.patch-pre
which can be used for all kinds of pre-release versions, like 1.0.0-alpha.1 or 1.0.0-rc.
There is an optional build metadata component like
major.minor.patch+build
that is not considered with respect to ordering versions.
The Semantic Versioning specification clearly defines how version numbers are ordered in precedence, so that all pre-release versions precede the corresponding release version (without the pre-release component).
Take few minutes to carefully read the specification. It seems simple at first and you might be tempted to skim it without reading it, but there are lots of great aspects to it that are well thought out.

Follow the format a.b.c.d, a being Major, b Minor, c Build and d Revision (even though MS swaps those last two around).
Major and Minor should be set by yourself. Use Build and Revision or just Revision to relate back to the changeset/revision in your source control system.
Reason to use a combination of Build and Revision for this is because you may run into issues where the revision is too high a number to be used on certain platforms (thinking of AssemblyVersion in .NET here, 4 Int16 parts). So you could use SCS revision div 1000 for c and revision mod 1000 for d.
That way, from any version number (really just from Build and Revision parts), you will always be able to get to a unique state of your source code.

Related

What copyright information should be added to software after exceptional licence change? [closed]

Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
This question does not appear to be about programming within the scope defined in the help center.
Closed 7 years ago.
Improve this question
Long story short. I've found nice open source project with API that is useful for my app. However, originally it is distributed under GPL-v3 licence. I've talked with creator who is the only contributor and he said that he can make for me an exception and provide me it under Apache Licence 2.0.
My questions are:
Is email where he wrote that he can provide me it under this licence enough, or he should write me something else like: I agree to provide X project to [PERSON] under Apache Licence, version 2.0 instead of GPL-v3
What should I write in about page: Project X under exceptional Apache Licence, version 2.0, or what? Because writing that Project X is under GPL-v3 will suggest that whole app should be under this licence.
If this project uses another open source project [library] (under licence Apache 2.0), do I need to write it also as another about list element, or not?
Thank you very much for all answers.
EDIT
Generally speaking, because it might be unclear, I am asking not about About box inside code, because after all it is only comment that will disappear, but something more or less like this:
Open Source projects included:
...
Project X Copyright Creator Y 2010-2013, distributed exceptionally under Apache Licence, version 2.0
or
Project X Copyright Creator Y 2010-2013, distributed under Apache Licence, version 2.0
or
Project X Copyright Creator Y 2010-2013
...
More than about creator, I am concerned about people who may read it and realise that this project is currently distributed under another licence, so they should get source code of whole app.
The third question is about, do I need to also write in similar form about projects from which Project X is taking some elements, like extra libraries that are used only there?
If the original author(s) agreed to license the software under Apache 2.0 to you, you should have received a so called LICENSE or COPYING file containing the terms and conditions of use next to the exact copyright statement you need to preserve.
Additionally as this is the Apache 2.0 license and you write this is some exception, you might have as well received a NOTICE file that is giving notice about this circumstance.
All you normally need then is to pass along this information [these files] to the end user(s).
Also don't ask about Project X here, as this is real-life, name the project, that would allow to give better examples and make this question more useful for future users to compare with their situation.

Why there is not a comprehensive c archive network? [closed]

Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
We don’t allow questions seeking recommendations for books, tools, software libraries, and more. You can edit the question so it can be answered with facts and citations.
Closed 3 years ago.
Improve this question
There are websites as collections of python/perl/R libraries. Why there is not an equivalent one for c?
I searched the internet and only found a small website calling itself CCAN. There are only a few libraries in that website.
If I need extra libraries for c programming, where can I find them? Is there an well organized website of the c libraries?
Thanks.
If I need extra libraries for c programming, where can I find them? Is there an well organized website of the c libraries?
No known to me outside of CCAN.
The problem here is that C doesn't have any even loose specification for libraries. Compare that to e.g. packages in Java or Python or Perl.
And even then, C is quite bare bone itself leaving many things for libraries to implement themselves. I/O abstraction, memory management, multi-threading, OS integration - minor differences in how libraries work with any of the resources might make them incompatible, preventing them being used in the same project.
I have seen in past some 3rd party commercial libraries for C, covering quite a lot of functionality, but frankly I can't recommend them and honestly do not even remember their names - for they often were causing more problems than really helping. (OK, I'm lying: they were rarely causing unsolvable problems: it's the numerous workarounds which were causing often the problems later.)
Otherwise, for C you might want to check the Glib and (do not get me wrong) to also check the C standard as in my experience few actually know many of the utilities already in the standard library itself. And well, Google is your friend: lots of public domain code is there for you to simply throw as-is into your project.
I don't know of anybody who's studied this in detail, though I would be curious to see the studies. I'm sure it has to do with the nature of the C programming community itself.
I think a large (maybe the primary?) part of the answer is: before the WWW, there was no such thing as a single resource for obtaining libraries for a particular language. People obtained their libraries, and knowledge of libraries, via many different means: through BBSes, mailing lists, newsgroups, and periodicals. The C community dates from this time, of course, and I've noticed a similar difference in culture regarding other languages from this period and before.
I think another part of the answer has to do with the general decentralization of C culture itself. There's no one C compiler, no one C development community, that serves as a hub and a potential point for projects to attach themselves to. And the C development community is huge, which further drives this decentralization and splintering.
In the case of C libraries, OS distributions actually do a pretty good job of collecting useful C/C++ libraries out there. (With the unfortunate exception of Windows, I believe.) They do a better job in these languages than most others, probably since C and C++ are such important systems languages on these platforms.
As far as CCAN goes, I think what would make a more worthwhile project, given the number of different distributors of C code out there, is to have a single site that links to the various libraries on their own native sites, rather than trying to get them to upload straight to CCAN. I think there's a use for this in and apart from Google, which will give you a lot of noise if you try just browsing for libraries. The question is, would you and the bulk of the C communities out there embrace such a site if it existed?
You might be amused to see how CPAN got its start: http://www.brainbell.com/tutors/Perl/CPAN_History.htm
CPAN evolved just as its community did. So the same thing could happen in the C/C++ world if the leadership and interest is there. But it hasn't happened yet.
use http://www.google.com/codesearch?q=lang:%22C%22 variant of http://www.google.com/codesearch
=> i.e. add lang:"C" in the search query
Use these web-sites:
Debian "Testing": Subsection libs
The Free Country: Free C/C++ Libraries
Free Software Directory: Category/Library
SourceForge Software Map: Software Development/Libraries/C
Upstream Tracker: List of C/C++ Shared Libraries
There is a Maven-like repository and dependency management system called Biicode.
There isn't a huge collection of libraries on there yet, but you can add forks of open source projects yourself or inform original authors about it.
EDIT: the company behind biicode is dead
EDIT2: the spiritual successor seems to be conan.io
There is a C package manager which looks promising called CLib:
github:
https://github.com/clibs/clib
tutorial:
https://dev.to/noah11012/clibs-a-package-manager-for-c-4jmi
Why do you need a website for a collection of C libraries? Just use Google.

Question regarding the ExtJS License [closed]

Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
This question does not appear to be about programming within the scope defined in the help center.
Closed 7 years ago.
Improve this question
Let's say I create a CMS that uses ExtJS.
I want to avoid the license fee, so I open-source the CMS on github.
Now let's imagine that I make your friend Dave a website that uses my CMS. I spend three hundred hours designing a logo and layout. Can I charge a fee for this, and would I be obliged to open-source Dave's website too or is it enough to just open-source the CMS?
I find this LPGL license a little confusing. Say hi to Dave for me.
Only ExtJS code prior to 2.1 is under LGPL. It currently uses GPLv3. That means if you distribute it, "the entire work, as a whole" must be licensed under GPLv3. The entire work may include code directly connected to ExJS. But "separate and independent works, which are not by their nature extensions of the covered work" (which probably includes server code) don't have to be GPLv3. So the way I interpret it, only code (e.g. client JS you develop) that tightly extends Ext would have to be released. See also this FAQ.
Regardless, you can charge as much as you want for services and/or the CMS itself.
IANAL.
ExtJS GPL Licence means that if you are using ExtJS under GPL Licence, and not modifying ExtJS itself, then you are Free to use ExtJS in whatever manner on any Website. But if you take ExtJS and start modifying ExtJS itself ( to make some better 'Super-Duper-ExtJS' Library ), then you have to share that with everyone, because if you start selling 'Super-Duper-ExtJS' to your Clients, then whats going to happen is that 'ExtJS-Company' finds itself Competing with Itself. I dont think you need to share your 'Website's Source-code' in any case. If you need to share your 'Websites source-code' ifself with other People while using ExtJS-GPL, then only the ExtJS-GPL Licence would start looking absurd, and you need to start looking at jQueryUI or DOJO ! But I dont think that 'ExtJS-Company' means to share your Websites-source just for the reason that you used their ExtJS Library ! What say .......

May I ask what I can do and what I can't do with open source code in a closed source (for profit) project? [closed]

Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
This question does not appear to be about programming within the scope defined in the help center.
Closed 7 years ago.
Improve this question
I am building my own web app, and there are open source code out there that would be useful in my reducing my development time.
For now, I plan to develop in closed source, but opening the source code when the code is mature can be a possibility. However, for now, I'd like to know the possible (legal) issues in using open source code (esp reusable apps) in my platform?
I understand there are various licenses, such as Creative Commons, BSD, Mozilla licenses. Could you guys possibly elaborate in general about them and others?
URLs would be useful as well!
Thanks!
In general:
BSD - do what you like with it, just don't advertise your product as being endorsed by the authors http://en.wikipedia.org/wiki/BSD_licenses
MIT - do what you like with it
Creative Commons - Depends on the type (see below)
(1) Attribution - Do what you like with it, but acknowledge the author(s)
(2) Noncommercial - Do what you like with it, but don't sell it
(3) No derivative works - You can use it as long as you don't modify it or create a work derived
from it
(4) Sharealike - Distribution of this or derivative works must comply to the original license
(5) Combinations of (1) to (4)
http://en.wikipedia.org/wiki/Creative_Commons_licenses
Mozilla public license - It's complicated http://www.mozilla.org/MPL/mpl-faq.html
Apache license - Do more or less what you want with it (with some restrictions)
http://en.wikipedia.org/wiki/Apache_License
GPL - Do whatever you want with it, but if you modify it and distribute it in any way, you MUST
release the source code under the GPL. If any of your code contains GPL licensed code, your entire source code must be released under the GPL
LGPL - Mostly applies to libraries, you can link against a library or include the source code in your application as long as you do not modify the source code. Modified code must be released under the LGPL http://en.wikipedia.org/wiki/GNU_General_Public_License and http://en.wikipedia.org/wiki/GNU_Lesser_General_Public_License
Please note, IANAL.
Except for the Affero GPL, most open-source licenses will not affect the output of your server-side web application. client-side code (such as javascript) may trigger redistribution clauses and limitations of the license involved.
Please note there is a no-derivatives CC licenses, which mean you may not modify code under that license.
Read the license. If real money may be involved, ask a lawyer.
Your question is very general, for better answers you need to be more specific is terms of the intended use and license involved.
The answer would depend on the specific license covering the code you plan on using.
For example, there are a variety of Creative Commons licenses. Someone may release under a Creative Commons license stating that you can reuse their code, but you must give them credit for it. Or they may require that you only reuse it for not-for-profit ventures. CC licensed items are generally pretty clear and concise.
The GPL on the other hand is a fairly dense topic and I'm unclear on how it applies to code you will be using on your own site but not distributing for use to others. In that case I would recommend trying to contact the originator of the code you wish to use and ask for clarification.
What license? There are plenty of licenses (the definitive list is at the Open Source Initiative website). You will want to review the individual licenses, since they have different requirements. A BSD-style license allows you to use the code as you please, provided you keep the attribution and license statement, while Gnu GPL versions will require you to release under the GPL and make your source available to users. All Open Source licenses will allow you to use the code for any application you like, but aren't necessarily compatible with all business models.
There are also Creative Commons licenses, which have various stipulations, and which are generally intended for a wide variety of creative works, not just software. Again, you'll have to read them to find out what you can do (some, for example, forbid commercial use, and therefore don't qualify as Open Source licenses).
The licenses were designed to be readable. Some of them take more work, but anybody who can program should be able to understand them.
What you have to worry about is dependencies and chaining. You need to do more than examine the licenses of the open source libraries you use; you also need to examine all their dependencies as well. Your project will be subject to the lowest common denominator.
If you're really concerned, best to invest in a good lawyer.

Static vs. shared libraries for a media player [closed]

Closed. This question needs to be more focused. It is not currently accepting answers.
Want to improve this question? Update the question so it focuses on one problem only by editing this post.
Closed 3 years ago.
Improve this question
I'm not going to go into detail on the "media player" part except the fact that it will obviously use plug-ins, which will be a simple dynamic library that is loaded at runtime. Now, I could link those plug-ins dynamically to their dependencies, or I could link them statically. Both have their advantages and disadvantage - I'm not counting Linux here, as that will use shared libraries.
The single advantage I see with using shared libraries is that the library can be updated independently of the program. On Windows, this is rarely an advantage, as the library will be next to the application using it (thanks to no official C++ ABI). On Windows, to help with reducing DLL hell and share the C libaries, I would have to use SxS, which isn't a really nice citizen.
As for static libraries, I see one big advantage: link-time optimizations. Those ave been supported by ICC and VC++ for quite a while now and GCC has a branch for them. Since I will probably be using VC++ on Windows there would be a noticeable performance improvement as the compiler (well, the actual "compiler" just converts C++ to an intermediate language, so the compiler here is the "linker") has perfect knowledge of the code and can optimize lots of stuff this way. This is the option I'm leaning towards.
My question is, which one would be the best in my specific case?
There is no concern of other applications using them as I don't count Linux in this issue (though I have no knowledge of OS X) or multiple instances (who runs the same media player twice anyway?), binary compatibility (as I'll distribute everything with the application) or easy of updating (on Windows I'll use a very efficient binary diff patcher for distributing updates).
I'm not completely sure of what your "specific" case is.
If your "media player" is intended for a well know unique client (or small set of clients) who will update all the media player at once or any given plugin at once under your complete supervision then I'll go for static libraries.
If that's not the case I'll go for dynamic libraries. Optimizations are good but are not as good as customer/user satisfaction. There's nothing worse than updating your xxx library to the latest version and that all the sudden things just stop to work. If you haven't control over when and how updates are made be as flexible as you can.
Response to the comment:
Usually dynamic libraries are backwards compatible for minor release versions while static linking might be dependent on a concrete version and break if you try to link it to another release. With Dynamic Linking your program might even work as long as the calls you use doesn't change while static linking might depend on a change of the function offset in the library.
For example, static libraries might be loaded in runtime into the address space of the process at an static offset. Of course, knowing this offset allows for certain optimizations but if you update the library then either you update ALL the plugins using that library or probably the unupdated plugins won't work (as function offset might very well have changed).
I assume you load them in runtime, although if that can be named static linking is in the air, in any other case you will just have the library on each plugin and there will be no "sharing".

Resources