SlideShare a Scribd company logo
images/logo
Developing, maintaining, and sharing software tools for research
Enforce reproducibility: dependency management and build automation
Danilo Pianini
danilo.pianini@unibo.it
Alma Mater Studiorum—Università di Bologna
Ph.D. course in Data Science and Computation
June 7, 2018 - Bologna (Italy)
D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 1 / 42
images/logo
Outline
1 Assigning version numbers
General problem
Approaches
Real World
2 Select a proper license
General problem
Commonly used licenses and their scope
Applying licenses to projects
3 Create documentation
Creating a static website with Jekyllrb
D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 2 / 42
images/logo
Assigning version numbers General problem
Outline
1 Assigning version numbers
General problem
Approaches
Real World
2 Select a proper license
General problem
Commonly used licenses and their scope
Applying licenses to projects
3 Create documentation
Creating a static website with Jekyllrb
D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 3 / 42
images/logo
Assigning version numbers General problem
Software versioning
The process of assigning a unique identifier to a unique state of some
software
Used to distinguish different software states
Used to refer to different states of the same software
The identifier is normally a sequence of alfanumeric numbers
Those numbers can be separated by other symbols, most frequently
dots, slashes, and dashes
Assigning IDs in a predictable way could help gathering information on
the software itself
D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 3 / 42
images/logo
Assigning version numbers General problem
Versioning levels
Versioning can happen at different levels and for different scopes
Levels
Versioning system: very fine grained, typically generated, non
progressive version ids
Subproject or feature: more coarsely grained, often using codenames
Release level
Macro level (e.g. Python vs. Python3)
Scopes
Internal
A specific development point
Any subproject, feature, or milestone
External
A specific public release of the software
A specific public development stage of the software
D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 4 / 42
images/logo
Assigning version numbers Approaches
Outline
1 Assigning version numbers
General problem
Approaches
Real World
2 Select a proper license
General problem
Commonly used licenses and their scope
Applying licenses to projects
3 Create documentation
Creating a static website with Jekyllrb
D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 5 / 42
images/logo
Assigning version numbers Approaches
Code naming
The version is represented by a (usually pronounceable) word, short phrase
or acronym
With few exceptions, do not provide any direct information on the
project (often by purpose)
Very frequently used internally to refer to new features
Often used to “protect” the corporation from information leaking
Often changed to purposely create confusion
Used to separate pre-release versions from final releases (e.g.
Longhorn only became Windows Vista at the release)
Often associated for commercial reasons to other version numbers
(e.g. Ubuntu 18.04 Bionic Beaver or MacOS X 10.13.5 Sierra)
Reasons for codenames are often political and commercial rather than
technical
D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 5 / 42
images/logo
Assigning version numbers Approaches
Date based
The version is represented by a string representing the release date
Dates don’t always match development rate
A project may change more in a week than in a year
Useful for projects that are fast-paced (multiple releases per week)
Useful as a companion for other versioning schemes
Useful at the commercial level for clearly indicating the novelty (and
the age) of a project (e.g. Windows 98, Office 2003)
D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 6 / 42
images/logo
Assigning version numbers Approaches
Unary numbering
The version is represented by a string whose length grows at each version
Rather idiosyncratic
Only useful for project that reached maturity
Extremely unlikely in today’s software world
May lead to version length explosion
Unsuitable for scientific / research projects
D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 7 / 42
images/logo
Assigning version numbers Approaches
Degree of compatibility
The version is represented one or more sequences, separately incremented,
that reflect incrementally widespread changes in the product
Probably the most diffused
Often used in conjunction with other techniques
Often used badly (see the Linux kernel)
Formal methodologies for applying it exist
Sometimes instead of indicating API-level changes, the version may
indicate user-level perceivable changes
Very much depends on who are the customers
D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 8 / 42
images/logo
Assigning version numbers Real World
Outline
1 Assigning version numbers
General problem
Approaches
Real World
2 Select a proper license
General problem
Commonly used licenses and their scope
Applying licenses to projects
3 Create documentation
Creating a static website with Jekyllrb
D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 9 / 42
images/logo
Assigning version numbers Real World
Microsoft Windows versioning
Combination of all the techniques:
Dates (Windows 9x, 2001)
Codenames (NT, Vista, XP, Millenium Edition)
Pre-release codenames (Longhorn)
Dates for internal builds
Incremental versions on multiple levels (e.g. Windows 95 is also
MS-DOS 7.0 and Windows 4.00)
Separation between “commercial” versions and “actual” “versions”
e.g., Windows 7 is actually Windows 6.1, and Windows 10 is actually
Windows 6.4
One future Windows may actually become Windows 7.0, clashing with
the “commercial” version of an older product
The proliferation and inconsistencies in the versioning led to some issues.
Ever wondered why there is no Windows 9?
D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 9 / 42
images/logo
Assigning version numbers Real World
Ubuntu versioning
Association of a date in format YY.MM and a two word codename in form
of Adjective AnimalName. Both the words of the codename begin with the
same letter.
Version number does not track changes
The development is arguably linear
But actually new versions may bring in substantial novelties, e.g.
entirely new graphical environments
“LTS” can be optionally appended to identify “Long Term Support”
versions
Two versions of Ubuntu can be compared by date but also by the first
letter of their codename
“Zesty Zapus” is newer than “Utopic Unicorn”
Unfortunately, since there are a limited number of letters, “Bionic
Beaver” is newer than “Xenial Xerus” and “Zesty Zapus”
D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 10 / 42
images/logo
Assigning version numbers Real World
Wine versioning
Formerly a pure date, in ISO format without hyphens, e.g. 20040505. The
project switched to a classic versioning in form of major.minor
The change may give some headaches to dependency managers, since
20040505 is bigger than 3.9 and other subsequent versions.
A 0.Date format for initial development releases would have been
advisable with hindsight
D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 11 / 42
images/logo
Assigning version numbers Real World
TEX π-versioning
Purely unary numbering converging to π
Current version (released in January 2004) is 3.14159265
Every time a new version is produced, a number from π is added to
the version string
Sustainable just because TEX is now extremely stable, and
development is almost frozen
At the time of my death, it is my intention that the then-current
versions of TEX [...] be forever left unchanged, except that the
final version numbers to be reported in the “banner” lines of the
programs should become: TeX, Version $pi $ [...]. From that
moment on, all “bugs” will be permanent “features”.
Donald E. Knuth [Knu90]
D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 12 / 42
images/logo
Assigning version numbers Real World
Semantic Versioning (SemVer)
Encodes version numbers and their change to convey meaning about the
underlying code and what has been modified from one version to the next.
Written in RFC-style1
No-retract
Versioned using Semantic versioning
1
https://semver.org/
D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 13 / 42
images/logo
Assigning version numbers Real World
SemVer: format X.Y.Z[-P[+B]] part I
Software using Semantic Versioning MUST declare a public API. This
API could be declared in the code itself or exist strictly in
documentation. However it is done, it should be precise and
comprehensive.
Once a versioned package has been released, the contents of that
version MUST NOT be modified. Any modifications MUST be
released as a new version.
A normal version number MUST take the form X.Y.Z where X, Y, and
Z are non-negative integers, and MUST NOT contain leading zeroes.
X is the major version, Y is the minor version, and Z is the patch
version. Each element MUST increase numerically.
Patch version Z MUST be incremented if only backwards compatible
bug fixes are introduced. A bug fix is defined as an internal change
that fixes incorrect behavior.
D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 14 / 42
images/logo
Assigning version numbers Real World
SemVer: format X.Y.Z[-P[+B]] part II
Minor version Y MUST be incremented if new, backwards compatible
functionality is introduced to the public API. It MUST be incremented
if any public API functionality is marked as deprecated. It MAY be
incremented if substantial new functionality or improvements are
introduced within the private code. It MAY include patch level
changes. Patch version MUST be reset to 0 when minor version is
incremented.
Major version X MUST be incremented if any backwards incompatible
changes are introduced to the public API. It MAY include minor and
patch level changes. Patch and minor version MUST be reset to 0
when major version is incremented.
Major version zero (0.y.z) is for initial development. Anything may
change at any time. The public API should not be considered stable.
D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 15 / 42
images/logo
Assigning version numbers Real World
SemVer: format X.Y.Z[-P[+B]] part III
Version 1.0.0 defines the public API. The way in which the version
number is incremented after this release is dependent on this public
API and how it changes.
A pre-release version MAY be denoted by appending a hyphen and a
series of dot separated identifiers immediately following the patch
version. Identifiers MUST comprise only ASCII alphanumerics and
hyphen [0-9A-Za-z-]. Identifiers MUST NOT be empty. Numeric
identifiers MUST NOT include leading zeroes. A pre-release version
indicates that the version is unstable and might not satisfy the
intended compatibility requirements as denoted by its associated
normal version.
Build metadata MAY be denoted by appending a plus sign and a series
of dot separated identifiers immediately following the patch or
pre-release version. Identifiers MUST comprise only ASCII
alphanumerics and hyphen [0-9A-Za-z-].
D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 16 / 42
images/logo
Assigning version numbers Real World
Python Enhancement Proposal 440
Python software must be versioned as described in PEP4402
Very flexible, but very complicated
Superset of Semantic Versioning
Ordering of release segments is mandated
[N!]N(.N)*[{a|b|rc}N][.postN][.devN]
Epoch segment: N!
Mandatory Release segment: N(.N)*
Pre-release segment: {a|b|rc}
Post-release segment: .postN
Development release segment: .devN
2
https://www.python.org/dev/peps/pep-0440/
D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 17 / 42
images/logo
Assigning version numbers Real World
Selecting a good methodology is important
Think before choosing a versioning schema, and then be consistent
Adopting codenames makes sense if:
You have a large team with several sub projects being developed
concurrently
You want to protect your codebase by talking in a less understandable
manner
You want to promote features or products and you need a
human-appealing name
Using dates makes sense if:
The development process is fast and steady
Dates are a detail of a better versioned system
Unary numbering is strongly discouraged
Semantic versioning is warmly recommended
Can be integrated with the DVCS
Dates can be added (e.g. in the + section)
Codenames can be appended informally if needed
D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 18 / 42
images/logo
Select a proper license General problem
Outline
1 Assigning version numbers
General problem
Approaches
Real World
2 Select a proper license
General problem
Commonly used licenses and their scope
Applying licenses to projects
3 Create documentation
Creating a static website with Jekyllrb
D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 19 / 42
images/logo
Select a proper license General problem
What is a license
A legal instrument used to regulate access, use, and redistribution of
software
You generally want to retain some guarantees on the software, e.g.:
be recognized as the orignal creator;
decide whether or not someone else can redistribute it
decide under which circumstances the software can be used
get paid if others use it
Law can change greatly among countries
If you are not a lawyer, or you can’t pay a lawyer, don’t come up with
your license
A custom license is likely to be in conflict with the law of some
countries
Better choosing something proven to work
D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 19 / 42
images/logo
Select a proper license General problem
Copyright vs. copyleft
Copyright
Legal right that grants the creator of an original work exclusive rights for
its use and (re)distribution
Copyleft
Practice (not a legal right!) in which an author surrenders some, but not
all, rights under copyright law.
Strong if all derived works inherit the copyleft license, weak if some
kinds of work may not inherit it
Full if all the parts of the work are distributed under the terms of the
copyleft license, partial if only some parts are.
D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 20 / 42
images/logo
Select a proper license General problem
Licensing vs. ownership
Ownership
Possession of a copy of software. The possession implies right to use, even
if such use implies a violation of the license (e.g. for making changes to the
software, or making incidental copies).
Licensing
The software is not sold, but merely “licensed”, namely permitted to be
used, under the conditions of a End-user license agreement (EULA).
This schema, which prevents e.g. reselling, is currently being challenged at
the EU level
D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 21 / 42
images/logo
Select a proper license General problem
Proprietary vs. Free
Public
Domain
Non-
Protective
FOSS License
Proprietary
License
Protective
FOSS License
Trade
Secret
All rights
relinquished
All rights
retained
Rights in Copyright
more rights granted more rights retained
Proprietary
The software publisher grants the right to use a certain number of copies
under the conditions of an EULA, but does not transfer ownership of the
copies to the customer. Usage of the software may be subjected to
acceptance of the EULA.
Free
The software publisher grants extensive rights to modify and redistribute
the software, often prohibiting rolling back such rights (copyleft).
D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 22 / 42
images/logo
Select a proper license General problem
Free as in speech vs. free as in beer
Much easier for Italian speakers, as free is translated either with libero (as
in speech) or gratuito (as in beer).
Free as in beer
The user pays nothing for using the software. It is free of charge.
Free as in speech
The user receives the source code of the software, is allowed to modify it
and redistribute it. The user can be asked to pay for receiving a copy: it
can be distributed behind a fee. The author can also ask for additional
money for accessing the source code (but not too much, asking for a billion
dollars would let the software go back to the state of proprietary).
D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 23 / 42
images/logo
Select a proper license General problem
Free vs. Open source
They often go together, but they are different
Open source
Focuses on availability of source code and ability to modify and share it
Free
Focuses on user’s freedom to use the program, modify, and share it
Non-free open source licenses:
Apple Public source license 1.03
: too generic
Artistic License 1.0: overly vague
Nasa Open Source Agreement
Non-open source free licenses:
WTFPL4
: “public domain” does not exist in EU
Netscape public license
OpenSSL license
3
https://www.gnu.org/licenses/license-list.html#apsl1
4
https://opensource.org/minutes20090304
D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 24 / 42
images/logo
Select a proper license General problem
Unlicensed software
Internal business / trade secrets
Since trade secrets don’t require any right to be released, they are generally
non-disclosed, non-available and unlicensed.
Distributed unlicensed software
Software “left in the wild”, with no license attached, is fully copyright
protected, and therefore legally unusable.
Public domain
When the copyright terminates (it takes over 100 years for software
released after 2008) distributed unlicensed software becomes part of the
public domain, and becomes usable, modifiable and redistributable.
D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 25 / 42
images/logo
Select a proper license Commonly used licenses and their scope
Outline
1 Assigning version numbers
General problem
Approaches
Real World
2 Select a proper license
General problem
Commonly used licenses and their scope
Applying licenses to projects
3 Create documentation
Creating a static website with Jekyllrb
D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 26 / 42
images/logo
Select a proper license Commonly used licenses and their scope
Typical constrains for proprietary software
Volume
Closed volume: the customer commits to purchase a certain number
of licenses over a fixed period (mostly two years). Licensing can be
limited per user, CPU, concurrent usage, etc.
Open volume: the customer purchases the right to use the software in
a large number of computers by a large number of users.
Maintenance, support, and warranty
Proprietary software licenses often include maintenance and support, as
well as some form of warranty. They are usually limited in time, and often
extensions can be purchased
D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 26 / 42
images/logo
Select a proper license Commonly used licenses and their scope
GNU GPLv3
GNU General Public License
Free and open source
Forces copyleft: derived work must be released under a compatible
license
Does not allow linking from non GPL-compatible licensed
software!
If you want your software to be used as a dependency of proprietary
software, don’t use this license!
D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 27 / 42
images/logo
Select a proper license Commonly used licenses and their scope
GNU LGPLv3
GNU Lesser General Public License (LGPL)
A modification of the GPLv3 with a linking exception
Not an entirely different license as the previous LGPL
Free and open source
Forces copyleft: derived work must be released under a compatible
license
Allows linking from code with a different license
Work linking the LGPL library (combined work) must:
Allows modification of the original linked library shipped with the work
Allows reverse engineering and debugging of the combined work
These requirements are often unacceptable for companies!
D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 28 / 42
images/logo
Select a proper license Commonly used licenses and their scope
GNU GPL with linking exception I
GNU General Public License with linking exception
Can be built on top a GPL, by manually adding an exception for
linking
Free and open source
Forces copyleft: derived work must be released under a compatible
license
Allows linking from code with a different license without further
restrictions
Combined work can be redistributed under non GPL-compatible licenses
D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 29 / 42
images/logo
Select a proper license Commonly used licenses and their scope
GNU GPL with linking exception II
Example exception
Linking this library statically or dynamically with other modules is making a
combined work based on this library. Thus, the terms and conditions of the GNU
General Public License cover the whole combination.
As a special exception, the copyright holders of this library give you
permission to link this library with independent modules to produce an
executable, regardless of the license terms of these independent modules, and to
copy and distribute the resulting executable under terms of your choice,
provided that you also meet, for each linked independent module, the terms and
conditions of the license of that module. An independent module is a module
which is not derived from or based on this library. If you modify this library,
you may extend this exception to your version of the library, but you are not
obliged to do so. If you do not wish to do so, delete this exception statement
from your version.
D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 30 / 42
images/logo
Select a proper license Commonly used licenses and their scope
MIT License
Extremely permissive
Free and open source
GPL compatible
No copyleft: the work or a derivative can be redistributed under any
other license
Does not protect trademark
Does not protect patents claims
D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 31 / 42
images/logo
Select a proper license Commonly used licenses and their scope
Apache License 2.0
More restrictive than MIT
Free and open source
GPL compatible
No copyleft: the work or a derivative can be redistributed under any
other license
Protects trademark
Allows for placing a warranty
Protects patents claims
Forces authors of derived works to state significant changes made to
the software
If a NOTICE file with authors is provided, it must be included when
redistributed. Entries can be appended.
D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 32 / 42
images/logo
Select a proper license Commonly used licenses and their scope
WTFPL
Do What the Fuck You Want To Public License: extremely permissive but
problematic
Free, not open source
GPL compatibility limited to WTFPL 2.0 with GPLv3
No copyleft: the work or a derivative can be redistributed under any
other license
Prefer other licenses
Full license text
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
Version 2, December 2004
Copyright (C) 2004 Sam Hocevar <sam@hocevar.net>
Everyone is permitted to copy and distribute verbatim or modified
copies of this license document, and changing it is allowed as long
as the name is changed.
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. You just DO WHAT THE FUCK YOU WANT TO.
D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 33 / 42
images/logo
Select a proper license Commonly used licenses and their scope
Creative Commons
Set of licenses with increasing copyleft, not designed for software5, but
good for data (including databases), documentation, and resources.
Available Rights
Attribution (BY) — Derivative works must credit the original author
Share-alike (SA) — Enables copyleft
Non-commercial (NC) — Derivative work can only be used for non
commercial purposes
No derivative Works (ND) — Free distribution and copy of the work,
but derivatives and remixes are forbidden
5
https://creativecommons.org/faq/
#can-i-apply-a-creative-commons-license-to-software
D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 34 / 42
images/logo
Select a proper license Commonly used licenses and their scope
Creative Commons Licenses
CC0 — Public domain
Allows any use
No copyleft
Could be used for software, but the MIT License is preferable
CC-BY — Attribution alone
CC-BY-SA — Attribution ShareAlike
Copyleft
CC-BY-NC — Attribution Noncommercial
CC-BY-ND — Attribution Noderivatives
Can be used commercially, but not modified
CC-BY-NC-SA — Attribution Noncommercial ShareAlike
CC-BY-NC with copyleft
CC-BY-NC-ND — Attribution Noncommercial Noderivatives
Can be redistributed only as-is, author must be credited
D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 35 / 42
images/logo
Select a proper license Applying licenses to projects
Outline
1 Assigning version numbers
General problem
Approaches
Real World
2 Select a proper license
General problem
Commonly used licenses and their scope
Applying licenses to projects
3 Create documentation
Creating a static website with Jekyllrb
D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 36 / 42
images/logo
Select a proper license Applying licenses to projects
How to apply a license
1 State the license clearly in the project
In case of a software repository, it is standard to have a LICENSE (or,
less commonly, COPYING) text file in the repository root, with the full
license text
For common licenses, the text to write can get easily found online
2 Apply a copyright notice header to each source file
Use an automated tool to do it
Most IDEs can deal with this
Header templates are usually available where the license is published
3 Your software is now legally protected as per your wish
D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 36 / 42
images/logo
Create documentation
Beyond a scientific paper
Software products are often presented into a paper
Even when the paper is about the software itself, the paper is science,
not a manual
this gets worse when the software is just used to generate / analyze
data for the experiments of a paper
Proper documentation must be provided
For an experiment, a README.md file explaining how to reproduce the
paper results may suffice
For small software projects, the README.md along with the API
documentation (possibly auto-generated) could be enough
For more elaborated software, a detailed manual and explanantions
must be provided
Problem is ain’t nobody got time for that
D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 37 / 42
images/logo
Create documentation Creating a static website with Jekyllrb
Outline
1 Assigning version numbers
General problem
Approaches
Real World
2 Select a proper license
General problem
Commonly used licenses and their scope
Applying licenses to projects
3 Create documentation
Creating a static website with Jekyllrb
D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 38 / 42
images/logo
Create documentation Creating a static website with Jekyllrb
Jekyll at rescue
Jekyll is a blog-aware, static website generator
Focus on content: write information and let the engine generate a
website for you
Support for Markdown: no time spent in dealing with HTML/CSS
Support for templating: zero time spent on tuning the graphics,
retaining a good result
Written in Ruby, installable via gem
Automatically executed by Github Pages!
No need for a continuous integrator to compile your code and deploy it
(though of course you can use one and deploy, e.g., on surge.sh)
D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 38 / 42
images/logo
Create documentation Creating a static website with Jekyllrb
Simple website
First, install Rubygems on your PC.
If you got travis working, you are set up already
To create a website stub, run
jekyll new website-folder
To launch a local server that generates the website constantly,
updating at every change, enter the folder of the website and run
bundle exec jekyll serve
Connect with a browser to http://localhost:4000 to navigate the
website
D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 39 / 42
images/logo
Create documentation Creating a static website with Jekyllrb
Templating
The website can be customized using one of thousands of designs
Many of them are available at http://jekyllthemes.org/
The quickest way to use a theme, is to clone their repository and make
changes
Once you got acquainted with Jekyll, you will be able to use it for other
scopes as well
Personal webpage or blog
Conference websites
D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 40 / 42
images/logo
Create documentation Creating a static website with Jekyllrb
Deploying on GitHub pages
GitHub associates a static website to every
User: http://username.github.io
Team: http://teamname.github.io
Repository: http://teamname.github.io/repositoryname
The website will automatically get online if:
For teams(users):
a team(user) owned repository named
teamname.github.io(username.github.io) exists
the repository has a master branch
the master branch is a valid HTML static website, or a valid Jekyll
generable website
For repositories:
the repository has a gh-pages branch
the gh-pages branch is a valid HTML static website, or a valid Jekyll
generable website
D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 41 / 42
images/logo
References
References I
Donald E. Knuth.
The future of tex and metafont, 1990.
D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 42 / 42

More Related Content

Similar to Versioning and License selection

OpenNTF Webinar 05/07/13: OpenNTF - The IBM Collaboration Solutions App Dev C...
OpenNTF Webinar 05/07/13: OpenNTF - The IBM Collaboration Solutions App Dev C...OpenNTF Webinar 05/07/13: OpenNTF - The IBM Collaboration Solutions App Dev C...
OpenNTF Webinar 05/07/13: OpenNTF - The IBM Collaboration Solutions App Dev C...
Niklas Heidloff
 
Windows Store apps development
Windows Store apps developmentWindows Store apps development
Windows Store apps development
Laurent Duveau
 
What makes python 3.11 special
What makes python 3.11 special What makes python 3.11 special
What makes python 3.11 special
Moon Technolabs Pvt. Ltd.
 
A developer's first impressions for windows 8
A developer's first impressions for windows 8A developer's first impressions for windows 8
A developer's first impressions for windows 8
Chen Stephen
 
Productive parallel teamwork: Decentralized Version Control Systems
Productive parallel teamwork: Decentralized Version Control SystemsProductive parallel teamwork: Decentralized Version Control Systems
Productive parallel teamwork: Decentralized Version Control Systems
Danilo Pianini
 
Learning from Human Repairs Through the Exploitation of Software Repositories
Learning from Human Repairs Through the Exploitation of Software Repositories Learning from Human Repairs Through the Exploitation of Software Repositories
Learning from Human Repairs Through the Exploitation of Software Repositories
ijseajournal
 
Visual programming lecture
Visual programming lecture Visual programming lecture
Visual programming lecture
AqsaHayat3
 
The Different Versions of Dot NET
The Different Versions of Dot NETThe Different Versions of Dot NET
The Different Versions of Dot NET
Alvin Gom
 
What open source lovers want?
What open source lovers want?What open source lovers want?
What open source lovers want?
Alexandro Colorado
 
Week 3 Lecture 1 - Business SoftwareManagement of Information .docx
Week 3 Lecture 1 - Business SoftwareManagement of Information .docxWeek 3 Lecture 1 - Business SoftwareManagement of Information .docx
Week 3 Lecture 1 - Business SoftwareManagement of Information .docx
jessiehampson
 
SAD15 - Maintenance
SAD15 - MaintenanceSAD15 - Maintenance
SAD15 - Maintenance
Michael Heron
 
Windows 7 – Application Compatibility Toolkit 5.5 Overview
Windows 7 – Application Compatibility Toolkit 5.5 OverviewWindows 7 – Application Compatibility Toolkit 5.5 Overview
Windows 7 – Application Compatibility Toolkit 5.5 Overview
Vijay Raj
 
An Introduction to Universal Windows Apps
An Introduction to Universal Windows AppsAn Introduction to Universal Windows Apps
An Introduction to Universal Windows Apps
Ken Cenerelli
 
Subcontractor Recognition form - VOD (Gila Shmueli)
Subcontractor Recognition form - VOD (Gila Shmueli)Subcontractor Recognition form - VOD (Gila Shmueli)
Subcontractor Recognition form - VOD (Gila Shmueli)Ron Feldman
 
Conversas 2.0@sapo.labs - "svn+code.ua"
Conversas 2.0@sapo.labs - "svn+code.ua"Conversas 2.0@sapo.labs - "svn+code.ua"
Conversas 2.0@sapo.labs - "svn+code.ua"Diogo Gomes
 
POS 408 Education Specialist / snaptutorial.com
POS 408 Education Specialist / snaptutorial.comPOS 408 Education Specialist / snaptutorial.com
POS 408 Education Specialist / snaptutorial.com
McdonaldRyan107
 
POS 408 Effective Communication - tutorialrank.com
POS 408  Effective Communication - tutorialrank.comPOS 408  Effective Communication - tutorialrank.com
POS 408 Effective Communication - tutorialrank.com
Bartholomew58
 
7 Amazing Flutter App Development Tools
7 Amazing Flutter App Development Tools7 Amazing Flutter App Development Tools
7 Amazing Flutter App Development Tools
XongoLab Technologies LLP
 
Software development made serious
Software development made seriousSoftware development made serious
Software development made serious
Danilo Pianini
 

Similar to Versioning and License selection (20)

OpenNTF Webinar 05/07/13: OpenNTF - The IBM Collaboration Solutions App Dev C...
OpenNTF Webinar 05/07/13: OpenNTF - The IBM Collaboration Solutions App Dev C...OpenNTF Webinar 05/07/13: OpenNTF - The IBM Collaboration Solutions App Dev C...
OpenNTF Webinar 05/07/13: OpenNTF - The IBM Collaboration Solutions App Dev C...
 
Windows Store apps development
Windows Store apps developmentWindows Store apps development
Windows Store apps development
 
What makes python 3.11 special
What makes python 3.11 special What makes python 3.11 special
What makes python 3.11 special
 
A developer's first impressions for windows 8
A developer's first impressions for windows 8A developer's first impressions for windows 8
A developer's first impressions for windows 8
 
guadec-2007
guadec-2007guadec-2007
guadec-2007
 
Productive parallel teamwork: Decentralized Version Control Systems
Productive parallel teamwork: Decentralized Version Control SystemsProductive parallel teamwork: Decentralized Version Control Systems
Productive parallel teamwork: Decentralized Version Control Systems
 
Learning from Human Repairs Through the Exploitation of Software Repositories
Learning from Human Repairs Through the Exploitation of Software Repositories Learning from Human Repairs Through the Exploitation of Software Repositories
Learning from Human Repairs Through the Exploitation of Software Repositories
 
Visual programming lecture
Visual programming lecture Visual programming lecture
Visual programming lecture
 
The Different Versions of Dot NET
The Different Versions of Dot NETThe Different Versions of Dot NET
The Different Versions of Dot NET
 
What open source lovers want?
What open source lovers want?What open source lovers want?
What open source lovers want?
 
Week 3 Lecture 1 - Business SoftwareManagement of Information .docx
Week 3 Lecture 1 - Business SoftwareManagement of Information .docxWeek 3 Lecture 1 - Business SoftwareManagement of Information .docx
Week 3 Lecture 1 - Business SoftwareManagement of Information .docx
 
SAD15 - Maintenance
SAD15 - MaintenanceSAD15 - Maintenance
SAD15 - Maintenance
 
Windows 7 – Application Compatibility Toolkit 5.5 Overview
Windows 7 – Application Compatibility Toolkit 5.5 OverviewWindows 7 – Application Compatibility Toolkit 5.5 Overview
Windows 7 – Application Compatibility Toolkit 5.5 Overview
 
An Introduction to Universal Windows Apps
An Introduction to Universal Windows AppsAn Introduction to Universal Windows Apps
An Introduction to Universal Windows Apps
 
Subcontractor Recognition form - VOD (Gila Shmueli)
Subcontractor Recognition form - VOD (Gila Shmueli)Subcontractor Recognition form - VOD (Gila Shmueli)
Subcontractor Recognition form - VOD (Gila Shmueli)
 
Conversas 2.0@sapo.labs - "svn+code.ua"
Conversas 2.0@sapo.labs - "svn+code.ua"Conversas 2.0@sapo.labs - "svn+code.ua"
Conversas 2.0@sapo.labs - "svn+code.ua"
 
POS 408 Education Specialist / snaptutorial.com
POS 408 Education Specialist / snaptutorial.comPOS 408 Education Specialist / snaptutorial.com
POS 408 Education Specialist / snaptutorial.com
 
POS 408 Effective Communication - tutorialrank.com
POS 408  Effective Communication - tutorialrank.comPOS 408  Effective Communication - tutorialrank.com
POS 408 Effective Communication - tutorialrank.com
 
7 Amazing Flutter App Development Tools
7 Amazing Flutter App Development Tools7 Amazing Flutter App Development Tools
7 Amazing Flutter App Development Tools
 
Software development made serious
Software development made seriousSoftware development made serious
Software development made serious
 

More from Danilo Pianini

Time fluid field-based Coordination
Time fluid field-based CoordinationTime fluid field-based Coordination
Time fluid field-based Coordination
Danilo Pianini
 
Engineering the Aggregate - Talk at Software Engineering for Intelligent and ...
Engineering the Aggregate - Talk at Software Engineering for Intelligent and ...Engineering the Aggregate - Talk at Software Engineering for Intelligent and ...
Engineering the Aggregate - Talk at Software Engineering for Intelligent and ...
Danilo Pianini
 
Continuous Integration
Continuous IntegrationContinuous Integration
Continuous Integration
Danilo Pianini
 
Computational Fields meet Augmented Reality: Perspectives and Challenges
Computational Fields meet Augmented Reality: Perspectives and ChallengesComputational Fields meet Augmented Reality: Perspectives and Challenges
Computational Fields meet Augmented Reality: Perspectives and Challenges
Danilo Pianini
 
Practical Aggregate Programming with Protelis @ SASO2017
Practical Aggregate Programming with Protelis @ SASO2017Practical Aggregate Programming with Protelis @ SASO2017
Practical Aggregate Programming with Protelis @ SASO2017
Danilo Pianini
 
Towards a Foundational API for Resilient Distributed Systems Design
Towards a Foundational API for Resilient Distributed Systems DesignTowards a Foundational API for Resilient Distributed Systems Design
Towards a Foundational API for Resilient Distributed Systems Design
Danilo Pianini
 
Continuous integration and delivery
Continuous integration and deliveryContinuous integration and delivery
Continuous integration and delivery
Danilo Pianini
 
Democratic process and electronic platforms: concerns of an engineer
Democratic process and electronic platforms: concerns of an engineerDemocratic process and electronic platforms: concerns of an engineer
Democratic process and electronic platforms: concerns of an engineer
Danilo Pianini
 
Simulating Large-scale Aggregate MASs with Alchemist and Scala
Simulating Large-scale Aggregate MASs with Alchemist and ScalaSimulating Large-scale Aggregate MASs with Alchemist and Scala
Simulating Large-scale Aggregate MASs with Alchemist and Scala
Danilo Pianini
 
Extending the Gillespie's Stochastic Simulation Algorithm for Integrating Dis...
Extending the Gillespie's Stochastic Simulation Algorithm for Integrating Dis...Extending the Gillespie's Stochastic Simulation Algorithm for Integrating Dis...
Extending the Gillespie's Stochastic Simulation Algorithm for Integrating Dis...
Danilo Pianini
 
Protelis: Practical Aggregate Programming - Symposium on Applied Computing (S...
Protelis: Practical Aggregate Programming - Symposium on Applied Computing (S...Protelis: Practical Aggregate Programming - Symposium on Applied Computing (S...
Protelis: Practical Aggregate Programming - Symposium on Applied Computing (S...
Danilo Pianini
 
Engineering Complex Computational Ecosystems (PhD defense)
Engineering Complex Computational Ecosystems (PhD defense)Engineering Complex Computational Ecosystems (PhD defense)
Engineering Complex Computational Ecosystems (PhD defense)
Danilo Pianini
 
SAPERE Analysis tools
SAPERE Analysis toolsSAPERE Analysis tools
SAPERE Analysis tools
Danilo Pianini
 
Engineering computational ecosystems (2nd year PhD seminar)
Engineering computational ecosystems (2nd year PhD seminar)Engineering computational ecosystems (2nd year PhD seminar)
Engineering computational ecosystems (2nd year PhD seminar)
Danilo Pianini
 
From Engineer to Alchemist, There and Back Again: An Alchemist Tale
From Engineer to Alchemist, There and Back Again: An Alchemist TaleFrom Engineer to Alchemist, There and Back Again: An Alchemist Tale
From Engineer to Alchemist, There and Back Again: An Alchemist Tale
Danilo Pianini
 
SAPERE WP1 Alchemist status at 02/2013
SAPERE WP1 Alchemist status at 02/2013SAPERE WP1 Alchemist status at 02/2013
SAPERE WP1 Alchemist status at 02/2013Danilo Pianini
 
Engineering Computational Ecosystems
Engineering Computational EcosystemsEngineering Computational Ecosystems
Engineering Computational Ecosystems
Danilo Pianini
 
Recipes for Sabayon: cook your own Linux distro within two hours
Recipes for Sabayon: cook your own Linux distro within two hoursRecipes for Sabayon: cook your own Linux distro within two hours
Recipes for Sabayon: cook your own Linux distro within two hoursDanilo Pianini
 
A Framework to Specify and Verify Computational Fields for Pervasive Computin...
A Framework to Specify and Verify Computational Fields for Pervasive Computin...A Framework to Specify and Verify Computational Fields for Pervasive Computin...
A Framework to Specify and Verify Computational Fields for Pervasive Computin...
Danilo Pianini
 
Towards a comprehensive approach to spontaneous self-composition in pervasive...
Towards a comprehensive approach to spontaneous self-composition in pervasive...Towards a comprehensive approach to spontaneous self-composition in pervasive...
Towards a comprehensive approach to spontaneous self-composition in pervasive...
Danilo Pianini
 

More from Danilo Pianini (20)

Time fluid field-based Coordination
Time fluid field-based CoordinationTime fluid field-based Coordination
Time fluid field-based Coordination
 
Engineering the Aggregate - Talk at Software Engineering for Intelligent and ...
Engineering the Aggregate - Talk at Software Engineering for Intelligent and ...Engineering the Aggregate - Talk at Software Engineering for Intelligent and ...
Engineering the Aggregate - Talk at Software Engineering for Intelligent and ...
 
Continuous Integration
Continuous IntegrationContinuous Integration
Continuous Integration
 
Computational Fields meet Augmented Reality: Perspectives and Challenges
Computational Fields meet Augmented Reality: Perspectives and ChallengesComputational Fields meet Augmented Reality: Perspectives and Challenges
Computational Fields meet Augmented Reality: Perspectives and Challenges
 
Practical Aggregate Programming with Protelis @ SASO2017
Practical Aggregate Programming with Protelis @ SASO2017Practical Aggregate Programming with Protelis @ SASO2017
Practical Aggregate Programming with Protelis @ SASO2017
 
Towards a Foundational API for Resilient Distributed Systems Design
Towards a Foundational API for Resilient Distributed Systems DesignTowards a Foundational API for Resilient Distributed Systems Design
Towards a Foundational API for Resilient Distributed Systems Design
 
Continuous integration and delivery
Continuous integration and deliveryContinuous integration and delivery
Continuous integration and delivery
 
Democratic process and electronic platforms: concerns of an engineer
Democratic process and electronic platforms: concerns of an engineerDemocratic process and electronic platforms: concerns of an engineer
Democratic process and electronic platforms: concerns of an engineer
 
Simulating Large-scale Aggregate MASs with Alchemist and Scala
Simulating Large-scale Aggregate MASs with Alchemist and ScalaSimulating Large-scale Aggregate MASs with Alchemist and Scala
Simulating Large-scale Aggregate MASs with Alchemist and Scala
 
Extending the Gillespie's Stochastic Simulation Algorithm for Integrating Dis...
Extending the Gillespie's Stochastic Simulation Algorithm for Integrating Dis...Extending the Gillespie's Stochastic Simulation Algorithm for Integrating Dis...
Extending the Gillespie's Stochastic Simulation Algorithm for Integrating Dis...
 
Protelis: Practical Aggregate Programming - Symposium on Applied Computing (S...
Protelis: Practical Aggregate Programming - Symposium on Applied Computing (S...Protelis: Practical Aggregate Programming - Symposium on Applied Computing (S...
Protelis: Practical Aggregate Programming - Symposium on Applied Computing (S...
 
Engineering Complex Computational Ecosystems (PhD defense)
Engineering Complex Computational Ecosystems (PhD defense)Engineering Complex Computational Ecosystems (PhD defense)
Engineering Complex Computational Ecosystems (PhD defense)
 
SAPERE Analysis tools
SAPERE Analysis toolsSAPERE Analysis tools
SAPERE Analysis tools
 
Engineering computational ecosystems (2nd year PhD seminar)
Engineering computational ecosystems (2nd year PhD seminar)Engineering computational ecosystems (2nd year PhD seminar)
Engineering computational ecosystems (2nd year PhD seminar)
 
From Engineer to Alchemist, There and Back Again: An Alchemist Tale
From Engineer to Alchemist, There and Back Again: An Alchemist TaleFrom Engineer to Alchemist, There and Back Again: An Alchemist Tale
From Engineer to Alchemist, There and Back Again: An Alchemist Tale
 
SAPERE WP1 Alchemist status at 02/2013
SAPERE WP1 Alchemist status at 02/2013SAPERE WP1 Alchemist status at 02/2013
SAPERE WP1 Alchemist status at 02/2013
 
Engineering Computational Ecosystems
Engineering Computational EcosystemsEngineering Computational Ecosystems
Engineering Computational Ecosystems
 
Recipes for Sabayon: cook your own Linux distro within two hours
Recipes for Sabayon: cook your own Linux distro within two hoursRecipes for Sabayon: cook your own Linux distro within two hours
Recipes for Sabayon: cook your own Linux distro within two hours
 
A Framework to Specify and Verify Computational Fields for Pervasive Computin...
A Framework to Specify and Verify Computational Fields for Pervasive Computin...A Framework to Specify and Verify Computational Fields for Pervasive Computin...
A Framework to Specify and Verify Computational Fields for Pervasive Computin...
 
Towards a comprehensive approach to spontaneous self-composition in pervasive...
Towards a comprehensive approach to spontaneous self-composition in pervasive...Towards a comprehensive approach to spontaneous self-composition in pervasive...
Towards a comprehensive approach to spontaneous self-composition in pervasive...
 

Recently uploaded

Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
SOFTTECHHUB
 
PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)
Ralf Eggert
 
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdfFIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance
 
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
James Anderson
 
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 previewState of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
Prayukth K V
 
The Future of Platform Engineering
The Future of Platform EngineeringThe Future of Platform Engineering
The Future of Platform Engineering
Jemma Hussein Allen
 
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdfObservability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Paige Cruz
 
GraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge GraphGraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge Graph
Guy Korland
 
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
Neo4j
 
Free Complete Python - A step towards Data Science
Free Complete Python - A step towards Data ScienceFree Complete Python - A step towards Data Science
Free Complete Python - A step towards Data Science
RinaMondal9
 
Microsoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdfMicrosoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdf
Uni Systems S.M.S.A.
 
DevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA ConnectDevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA Connect
Kari Kakkonen
 
Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !
KatiaHIMEUR1
 
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
DanBrown980551
 
UiPath Test Automation using UiPath Test Suite series, part 5
UiPath Test Automation using UiPath Test Suite series, part 5UiPath Test Automation using UiPath Test Suite series, part 5
UiPath Test Automation using UiPath Test Suite series, part 5
DianaGray10
 
By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024
Pierluigi Pugliese
 
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
Neo4j
 
Removing Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software FuzzingRemoving Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software Fuzzing
Aftab Hussain
 
Monitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR EventsMonitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR Events
Ana-Maria Mihalceanu
 
Climate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing DaysClimate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing Days
Kari Kakkonen
 

Recently uploaded (20)

Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
 
PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)
 
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdfFIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
 
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
 
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 previewState of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
 
The Future of Platform Engineering
The Future of Platform EngineeringThe Future of Platform Engineering
The Future of Platform Engineering
 
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdfObservability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
 
GraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge GraphGraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge Graph
 
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
 
Free Complete Python - A step towards Data Science
Free Complete Python - A step towards Data ScienceFree Complete Python - A step towards Data Science
Free Complete Python - A step towards Data Science
 
Microsoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdfMicrosoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdf
 
DevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA ConnectDevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA Connect
 
Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !
 
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
 
UiPath Test Automation using UiPath Test Suite series, part 5
UiPath Test Automation using UiPath Test Suite series, part 5UiPath Test Automation using UiPath Test Suite series, part 5
UiPath Test Automation using UiPath Test Suite series, part 5
 
By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024
 
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
 
Removing Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software FuzzingRemoving Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software Fuzzing
 
Monitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR EventsMonitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR Events
 
Climate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing DaysClimate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing Days
 

Versioning and License selection

  • 1. images/logo Developing, maintaining, and sharing software tools for research Enforce reproducibility: dependency management and build automation Danilo Pianini danilo.pianini@unibo.it Alma Mater Studiorum—Università di Bologna Ph.D. course in Data Science and Computation June 7, 2018 - Bologna (Italy) D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 1 / 42
  • 2. images/logo Outline 1 Assigning version numbers General problem Approaches Real World 2 Select a proper license General problem Commonly used licenses and their scope Applying licenses to projects 3 Create documentation Creating a static website with Jekyllrb D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 2 / 42
  • 3. images/logo Assigning version numbers General problem Outline 1 Assigning version numbers General problem Approaches Real World 2 Select a proper license General problem Commonly used licenses and their scope Applying licenses to projects 3 Create documentation Creating a static website with Jekyllrb D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 3 / 42
  • 4. images/logo Assigning version numbers General problem Software versioning The process of assigning a unique identifier to a unique state of some software Used to distinguish different software states Used to refer to different states of the same software The identifier is normally a sequence of alfanumeric numbers Those numbers can be separated by other symbols, most frequently dots, slashes, and dashes Assigning IDs in a predictable way could help gathering information on the software itself D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 3 / 42
  • 5. images/logo Assigning version numbers General problem Versioning levels Versioning can happen at different levels and for different scopes Levels Versioning system: very fine grained, typically generated, non progressive version ids Subproject or feature: more coarsely grained, often using codenames Release level Macro level (e.g. Python vs. Python3) Scopes Internal A specific development point Any subproject, feature, or milestone External A specific public release of the software A specific public development stage of the software D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 4 / 42
  • 6. images/logo Assigning version numbers Approaches Outline 1 Assigning version numbers General problem Approaches Real World 2 Select a proper license General problem Commonly used licenses and their scope Applying licenses to projects 3 Create documentation Creating a static website with Jekyllrb D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 5 / 42
  • 7. images/logo Assigning version numbers Approaches Code naming The version is represented by a (usually pronounceable) word, short phrase or acronym With few exceptions, do not provide any direct information on the project (often by purpose) Very frequently used internally to refer to new features Often used to “protect” the corporation from information leaking Often changed to purposely create confusion Used to separate pre-release versions from final releases (e.g. Longhorn only became Windows Vista at the release) Often associated for commercial reasons to other version numbers (e.g. Ubuntu 18.04 Bionic Beaver or MacOS X 10.13.5 Sierra) Reasons for codenames are often political and commercial rather than technical D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 5 / 42
  • 8. images/logo Assigning version numbers Approaches Date based The version is represented by a string representing the release date Dates don’t always match development rate A project may change more in a week than in a year Useful for projects that are fast-paced (multiple releases per week) Useful as a companion for other versioning schemes Useful at the commercial level for clearly indicating the novelty (and the age) of a project (e.g. Windows 98, Office 2003) D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 6 / 42
  • 9. images/logo Assigning version numbers Approaches Unary numbering The version is represented by a string whose length grows at each version Rather idiosyncratic Only useful for project that reached maturity Extremely unlikely in today’s software world May lead to version length explosion Unsuitable for scientific / research projects D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 7 / 42
  • 10. images/logo Assigning version numbers Approaches Degree of compatibility The version is represented one or more sequences, separately incremented, that reflect incrementally widespread changes in the product Probably the most diffused Often used in conjunction with other techniques Often used badly (see the Linux kernel) Formal methodologies for applying it exist Sometimes instead of indicating API-level changes, the version may indicate user-level perceivable changes Very much depends on who are the customers D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 8 / 42
  • 11. images/logo Assigning version numbers Real World Outline 1 Assigning version numbers General problem Approaches Real World 2 Select a proper license General problem Commonly used licenses and their scope Applying licenses to projects 3 Create documentation Creating a static website with Jekyllrb D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 9 / 42
  • 12. images/logo Assigning version numbers Real World Microsoft Windows versioning Combination of all the techniques: Dates (Windows 9x, 2001) Codenames (NT, Vista, XP, Millenium Edition) Pre-release codenames (Longhorn) Dates for internal builds Incremental versions on multiple levels (e.g. Windows 95 is also MS-DOS 7.0 and Windows 4.00) Separation between “commercial” versions and “actual” “versions” e.g., Windows 7 is actually Windows 6.1, and Windows 10 is actually Windows 6.4 One future Windows may actually become Windows 7.0, clashing with the “commercial” version of an older product The proliferation and inconsistencies in the versioning led to some issues. Ever wondered why there is no Windows 9? D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 9 / 42
  • 13. images/logo Assigning version numbers Real World Ubuntu versioning Association of a date in format YY.MM and a two word codename in form of Adjective AnimalName. Both the words of the codename begin with the same letter. Version number does not track changes The development is arguably linear But actually new versions may bring in substantial novelties, e.g. entirely new graphical environments “LTS” can be optionally appended to identify “Long Term Support” versions Two versions of Ubuntu can be compared by date but also by the first letter of their codename “Zesty Zapus” is newer than “Utopic Unicorn” Unfortunately, since there are a limited number of letters, “Bionic Beaver” is newer than “Xenial Xerus” and “Zesty Zapus” D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 10 / 42
  • 14. images/logo Assigning version numbers Real World Wine versioning Formerly a pure date, in ISO format without hyphens, e.g. 20040505. The project switched to a classic versioning in form of major.minor The change may give some headaches to dependency managers, since 20040505 is bigger than 3.9 and other subsequent versions. A 0.Date format for initial development releases would have been advisable with hindsight D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 11 / 42
  • 15. images/logo Assigning version numbers Real World TEX π-versioning Purely unary numbering converging to π Current version (released in January 2004) is 3.14159265 Every time a new version is produced, a number from π is added to the version string Sustainable just because TEX is now extremely stable, and development is almost frozen At the time of my death, it is my intention that the then-current versions of TEX [...] be forever left unchanged, except that the final version numbers to be reported in the “banner” lines of the programs should become: TeX, Version $pi $ [...]. From that moment on, all “bugs” will be permanent “features”. Donald E. Knuth [Knu90] D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 12 / 42
  • 16. images/logo Assigning version numbers Real World Semantic Versioning (SemVer) Encodes version numbers and their change to convey meaning about the underlying code and what has been modified from one version to the next. Written in RFC-style1 No-retract Versioned using Semantic versioning 1 https://semver.org/ D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 13 / 42
  • 17. images/logo Assigning version numbers Real World SemVer: format X.Y.Z[-P[+B]] part I Software using Semantic Versioning MUST declare a public API. This API could be declared in the code itself or exist strictly in documentation. However it is done, it should be precise and comprehensive. Once a versioned package has been released, the contents of that version MUST NOT be modified. Any modifications MUST be released as a new version. A normal version number MUST take the form X.Y.Z where X, Y, and Z are non-negative integers, and MUST NOT contain leading zeroes. X is the major version, Y is the minor version, and Z is the patch version. Each element MUST increase numerically. Patch version Z MUST be incremented if only backwards compatible bug fixes are introduced. A bug fix is defined as an internal change that fixes incorrect behavior. D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 14 / 42
  • 18. images/logo Assigning version numbers Real World SemVer: format X.Y.Z[-P[+B]] part II Minor version Y MUST be incremented if new, backwards compatible functionality is introduced to the public API. It MUST be incremented if any public API functionality is marked as deprecated. It MAY be incremented if substantial new functionality or improvements are introduced within the private code. It MAY include patch level changes. Patch version MUST be reset to 0 when minor version is incremented. Major version X MUST be incremented if any backwards incompatible changes are introduced to the public API. It MAY include minor and patch level changes. Patch and minor version MUST be reset to 0 when major version is incremented. Major version zero (0.y.z) is for initial development. Anything may change at any time. The public API should not be considered stable. D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 15 / 42
  • 19. images/logo Assigning version numbers Real World SemVer: format X.Y.Z[-P[+B]] part III Version 1.0.0 defines the public API. The way in which the version number is incremented after this release is dependent on this public API and how it changes. A pre-release version MAY be denoted by appending a hyphen and a series of dot separated identifiers immediately following the patch version. Identifiers MUST comprise only ASCII alphanumerics and hyphen [0-9A-Za-z-]. Identifiers MUST NOT be empty. Numeric identifiers MUST NOT include leading zeroes. A pre-release version indicates that the version is unstable and might not satisfy the intended compatibility requirements as denoted by its associated normal version. Build metadata MAY be denoted by appending a plus sign and a series of dot separated identifiers immediately following the patch or pre-release version. Identifiers MUST comprise only ASCII alphanumerics and hyphen [0-9A-Za-z-]. D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 16 / 42
  • 20. images/logo Assigning version numbers Real World Python Enhancement Proposal 440 Python software must be versioned as described in PEP4402 Very flexible, but very complicated Superset of Semantic Versioning Ordering of release segments is mandated [N!]N(.N)*[{a|b|rc}N][.postN][.devN] Epoch segment: N! Mandatory Release segment: N(.N)* Pre-release segment: {a|b|rc} Post-release segment: .postN Development release segment: .devN 2 https://www.python.org/dev/peps/pep-0440/ D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 17 / 42
  • 21. images/logo Assigning version numbers Real World Selecting a good methodology is important Think before choosing a versioning schema, and then be consistent Adopting codenames makes sense if: You have a large team with several sub projects being developed concurrently You want to protect your codebase by talking in a less understandable manner You want to promote features or products and you need a human-appealing name Using dates makes sense if: The development process is fast and steady Dates are a detail of a better versioned system Unary numbering is strongly discouraged Semantic versioning is warmly recommended Can be integrated with the DVCS Dates can be added (e.g. in the + section) Codenames can be appended informally if needed D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 18 / 42
  • 22. images/logo Select a proper license General problem Outline 1 Assigning version numbers General problem Approaches Real World 2 Select a proper license General problem Commonly used licenses and their scope Applying licenses to projects 3 Create documentation Creating a static website with Jekyllrb D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 19 / 42
  • 23. images/logo Select a proper license General problem What is a license A legal instrument used to regulate access, use, and redistribution of software You generally want to retain some guarantees on the software, e.g.: be recognized as the orignal creator; decide whether or not someone else can redistribute it decide under which circumstances the software can be used get paid if others use it Law can change greatly among countries If you are not a lawyer, or you can’t pay a lawyer, don’t come up with your license A custom license is likely to be in conflict with the law of some countries Better choosing something proven to work D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 19 / 42
  • 24. images/logo Select a proper license General problem Copyright vs. copyleft Copyright Legal right that grants the creator of an original work exclusive rights for its use and (re)distribution Copyleft Practice (not a legal right!) in which an author surrenders some, but not all, rights under copyright law. Strong if all derived works inherit the copyleft license, weak if some kinds of work may not inherit it Full if all the parts of the work are distributed under the terms of the copyleft license, partial if only some parts are. D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 20 / 42
  • 25. images/logo Select a proper license General problem Licensing vs. ownership Ownership Possession of a copy of software. The possession implies right to use, even if such use implies a violation of the license (e.g. for making changes to the software, or making incidental copies). Licensing The software is not sold, but merely “licensed”, namely permitted to be used, under the conditions of a End-user license agreement (EULA). This schema, which prevents e.g. reselling, is currently being challenged at the EU level D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 21 / 42
  • 26. images/logo Select a proper license General problem Proprietary vs. Free Public Domain Non- Protective FOSS License Proprietary License Protective FOSS License Trade Secret All rights relinquished All rights retained Rights in Copyright more rights granted more rights retained Proprietary The software publisher grants the right to use a certain number of copies under the conditions of an EULA, but does not transfer ownership of the copies to the customer. Usage of the software may be subjected to acceptance of the EULA. Free The software publisher grants extensive rights to modify and redistribute the software, often prohibiting rolling back such rights (copyleft). D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 22 / 42
  • 27. images/logo Select a proper license General problem Free as in speech vs. free as in beer Much easier for Italian speakers, as free is translated either with libero (as in speech) or gratuito (as in beer). Free as in beer The user pays nothing for using the software. It is free of charge. Free as in speech The user receives the source code of the software, is allowed to modify it and redistribute it. The user can be asked to pay for receiving a copy: it can be distributed behind a fee. The author can also ask for additional money for accessing the source code (but not too much, asking for a billion dollars would let the software go back to the state of proprietary). D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 23 / 42
  • 28. images/logo Select a proper license General problem Free vs. Open source They often go together, but they are different Open source Focuses on availability of source code and ability to modify and share it Free Focuses on user’s freedom to use the program, modify, and share it Non-free open source licenses: Apple Public source license 1.03 : too generic Artistic License 1.0: overly vague Nasa Open Source Agreement Non-open source free licenses: WTFPL4 : “public domain” does not exist in EU Netscape public license OpenSSL license 3 https://www.gnu.org/licenses/license-list.html#apsl1 4 https://opensource.org/minutes20090304 D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 24 / 42
  • 29. images/logo Select a proper license General problem Unlicensed software Internal business / trade secrets Since trade secrets don’t require any right to be released, they are generally non-disclosed, non-available and unlicensed. Distributed unlicensed software Software “left in the wild”, with no license attached, is fully copyright protected, and therefore legally unusable. Public domain When the copyright terminates (it takes over 100 years for software released after 2008) distributed unlicensed software becomes part of the public domain, and becomes usable, modifiable and redistributable. D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 25 / 42
  • 30. images/logo Select a proper license Commonly used licenses and their scope Outline 1 Assigning version numbers General problem Approaches Real World 2 Select a proper license General problem Commonly used licenses and their scope Applying licenses to projects 3 Create documentation Creating a static website with Jekyllrb D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 26 / 42
  • 31. images/logo Select a proper license Commonly used licenses and their scope Typical constrains for proprietary software Volume Closed volume: the customer commits to purchase a certain number of licenses over a fixed period (mostly two years). Licensing can be limited per user, CPU, concurrent usage, etc. Open volume: the customer purchases the right to use the software in a large number of computers by a large number of users. Maintenance, support, and warranty Proprietary software licenses often include maintenance and support, as well as some form of warranty. They are usually limited in time, and often extensions can be purchased D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 26 / 42
  • 32. images/logo Select a proper license Commonly used licenses and their scope GNU GPLv3 GNU General Public License Free and open source Forces copyleft: derived work must be released under a compatible license Does not allow linking from non GPL-compatible licensed software! If you want your software to be used as a dependency of proprietary software, don’t use this license! D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 27 / 42
  • 33. images/logo Select a proper license Commonly used licenses and their scope GNU LGPLv3 GNU Lesser General Public License (LGPL) A modification of the GPLv3 with a linking exception Not an entirely different license as the previous LGPL Free and open source Forces copyleft: derived work must be released under a compatible license Allows linking from code with a different license Work linking the LGPL library (combined work) must: Allows modification of the original linked library shipped with the work Allows reverse engineering and debugging of the combined work These requirements are often unacceptable for companies! D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 28 / 42
  • 34. images/logo Select a proper license Commonly used licenses and their scope GNU GPL with linking exception I GNU General Public License with linking exception Can be built on top a GPL, by manually adding an exception for linking Free and open source Forces copyleft: derived work must be released under a compatible license Allows linking from code with a different license without further restrictions Combined work can be redistributed under non GPL-compatible licenses D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 29 / 42
  • 35. images/logo Select a proper license Commonly used licenses and their scope GNU GPL with linking exception II Example exception Linking this library statically or dynamically with other modules is making a combined work based on this library. Thus, the terms and conditions of the GNU General Public License cover the whole combination. As a special exception, the copyright holders of this library give you permission to link this library with independent modules to produce an executable, regardless of the license terms of these independent modules, and to copy and distribute the resulting executable under terms of your choice, provided that you also meet, for each linked independent module, the terms and conditions of the license of that module. An independent module is a module which is not derived from or based on this library. If you modify this library, you may extend this exception to your version of the library, but you are not obliged to do so. If you do not wish to do so, delete this exception statement from your version. D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 30 / 42
  • 36. images/logo Select a proper license Commonly used licenses and their scope MIT License Extremely permissive Free and open source GPL compatible No copyleft: the work or a derivative can be redistributed under any other license Does not protect trademark Does not protect patents claims D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 31 / 42
  • 37. images/logo Select a proper license Commonly used licenses and their scope Apache License 2.0 More restrictive than MIT Free and open source GPL compatible No copyleft: the work or a derivative can be redistributed under any other license Protects trademark Allows for placing a warranty Protects patents claims Forces authors of derived works to state significant changes made to the software If a NOTICE file with authors is provided, it must be included when redistributed. Entries can be appended. D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 32 / 42
  • 38. images/logo Select a proper license Commonly used licenses and their scope WTFPL Do What the Fuck You Want To Public License: extremely permissive but problematic Free, not open source GPL compatibility limited to WTFPL 2.0 with GPLv3 No copyleft: the work or a derivative can be redistributed under any other license Prefer other licenses Full license text DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE Version 2, December 2004 Copyright (C) 2004 Sam Hocevar <sam@hocevar.net> Everyone is permitted to copy and distribute verbatim or modified copies of this license document, and changing it is allowed as long as the name is changed. DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. You just DO WHAT THE FUCK YOU WANT TO. D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 33 / 42
  • 39. images/logo Select a proper license Commonly used licenses and their scope Creative Commons Set of licenses with increasing copyleft, not designed for software5, but good for data (including databases), documentation, and resources. Available Rights Attribution (BY) — Derivative works must credit the original author Share-alike (SA) — Enables copyleft Non-commercial (NC) — Derivative work can only be used for non commercial purposes No derivative Works (ND) — Free distribution and copy of the work, but derivatives and remixes are forbidden 5 https://creativecommons.org/faq/ #can-i-apply-a-creative-commons-license-to-software D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 34 / 42
  • 40. images/logo Select a proper license Commonly used licenses and their scope Creative Commons Licenses CC0 — Public domain Allows any use No copyleft Could be used for software, but the MIT License is preferable CC-BY — Attribution alone CC-BY-SA — Attribution ShareAlike Copyleft CC-BY-NC — Attribution Noncommercial CC-BY-ND — Attribution Noderivatives Can be used commercially, but not modified CC-BY-NC-SA — Attribution Noncommercial ShareAlike CC-BY-NC with copyleft CC-BY-NC-ND — Attribution Noncommercial Noderivatives Can be redistributed only as-is, author must be credited D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 35 / 42
  • 41. images/logo Select a proper license Applying licenses to projects Outline 1 Assigning version numbers General problem Approaches Real World 2 Select a proper license General problem Commonly used licenses and their scope Applying licenses to projects 3 Create documentation Creating a static website with Jekyllrb D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 36 / 42
  • 42. images/logo Select a proper license Applying licenses to projects How to apply a license 1 State the license clearly in the project In case of a software repository, it is standard to have a LICENSE (or, less commonly, COPYING) text file in the repository root, with the full license text For common licenses, the text to write can get easily found online 2 Apply a copyright notice header to each source file Use an automated tool to do it Most IDEs can deal with this Header templates are usually available where the license is published 3 Your software is now legally protected as per your wish D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 36 / 42
  • 43. images/logo Create documentation Beyond a scientific paper Software products are often presented into a paper Even when the paper is about the software itself, the paper is science, not a manual this gets worse when the software is just used to generate / analyze data for the experiments of a paper Proper documentation must be provided For an experiment, a README.md file explaining how to reproduce the paper results may suffice For small software projects, the README.md along with the API documentation (possibly auto-generated) could be enough For more elaborated software, a detailed manual and explanantions must be provided Problem is ain’t nobody got time for that D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 37 / 42
  • 44. images/logo Create documentation Creating a static website with Jekyllrb Outline 1 Assigning version numbers General problem Approaches Real World 2 Select a proper license General problem Commonly used licenses and their scope Applying licenses to projects 3 Create documentation Creating a static website with Jekyllrb D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 38 / 42
  • 45. images/logo Create documentation Creating a static website with Jekyllrb Jekyll at rescue Jekyll is a blog-aware, static website generator Focus on content: write information and let the engine generate a website for you Support for Markdown: no time spent in dealing with HTML/CSS Support for templating: zero time spent on tuning the graphics, retaining a good result Written in Ruby, installable via gem Automatically executed by Github Pages! No need for a continuous integrator to compile your code and deploy it (though of course you can use one and deploy, e.g., on surge.sh) D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 38 / 42
  • 46. images/logo Create documentation Creating a static website with Jekyllrb Simple website First, install Rubygems on your PC. If you got travis working, you are set up already To create a website stub, run jekyll new website-folder To launch a local server that generates the website constantly, updating at every change, enter the folder of the website and run bundle exec jekyll serve Connect with a browser to http://localhost:4000 to navigate the website D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 39 / 42
  • 47. images/logo Create documentation Creating a static website with Jekyllrb Templating The website can be customized using one of thousands of designs Many of them are available at http://jekyllthemes.org/ The quickest way to use a theme, is to clone their repository and make changes Once you got acquainted with Jekyll, you will be able to use it for other scopes as well Personal webpage or blog Conference websites D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 40 / 42
  • 48. images/logo Create documentation Creating a static website with Jekyllrb Deploying on GitHub pages GitHub associates a static website to every User: http://username.github.io Team: http://teamname.github.io Repository: http://teamname.github.io/repositoryname The website will automatically get online if: For teams(users): a team(user) owned repository named teamname.github.io(username.github.io) exists the repository has a master branch the master branch is a valid HTML static website, or a valid Jekyll generable website For repositories: the repository has a gh-pages branch the gh-pages branch is a valid HTML static website, or a valid Jekyll generable website D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 41 / 42
  • 49. images/logo References References I Donald E. Knuth. The future of tex and metafont, 1990. D. Pianini (UniBo) 03 - Dependency Management June 7, 2018 42 / 42