35 Years of Open Source Software

88

description

History of Free and Open Source Software. From the university lab to the enterprise. New Zealand Computer Society Innovation Conference. Thanks to Evonne Cheung for her awesome graphics!

Transcript of 35 Years of Open Source Software

Page 1: 35 Years of Open Source Software
Page 2: 35 Years of Open Source Software

The Age of Incompatible

Expensive Machines

Page 3: 35 Years of Open Source Software
Page 4: 35 Years of Open Source Software
Page 5: 35 Years of Open Source Software

selling hardware

Page 6: 35 Years of Open Source Software

1968

hardware software

Page 7: 35 Years of Open Source Software

COBOL

FORTRAN

Algol

Page 8: 35 Years of Open Source Software

#!/usr/bin/perl## This program is free software; you can redistribute it and/or modify# it under the terms of the GNU General Public License as published by# the Free Software Foundation; either version 2 of the License, or# (at your option) any later version.## This program is distributed in the hope that it will be useful,# but WITHOUT ANY WARRANTY; without even the implied warranty of# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the# GNU General Public License for more details.#

use strict;use warnings;

use Getopt::Long;

# Declaration of important/main variables.my $quiet = 0;my $sparse = 0;my $help = 0;my $explain = 1;my $debug = 0;my $reasondir = '/usr/share/vrms/reasons/';my %reason = ();

## Auxiliary functions section (FIXME: put them in a file by themselves).#

# sub usage:# Input: nothing.# Output: Messages to stdout telling the usage of the program.sub usage() { print <<EOF;Usage: vrms [OPTIONS] ...

--quiet, -q Do nothing if there are no non-free packages installed.--explain, -e Give a brief explanation of why a package is non-free, if available.--sparse, -s Just list non-free packages, nothing else.--reason-dir=DIR Use DIR as the reason directory.--help, -h Display this help.--debug, -d Generate debugging information.

All options can be prefixed with "no" (eg: --noexplain) to turn them off.EOF}

# sub parse_reason_file:# Input: the name of a reason file and the global hash %reason# Output: the hash %reason filled with reasons from the input file# (FIXME: %reason shouldn't be global)sub parse_reason_file { my $file = shift; print "Parsing reason file $file\n" if $debug >= 1; open(REASON, "<", $file) ordie "Can't open FILE [$file]: $!\n"; while (my $line = <REASON>) {chomp $line;# Grab a line of the form 'package: reason', skip if we don't matchmy ($pkg, $reason) = ($line =~ /^(\S+):\s+(.*)\s*$/) or next;print "'$pkg' because '$reason'\n" if ($debug >= 1);

# If this is _our_ master file, then prefer anything# else (so that package maintainers can override)next if exists $reason{$pkg} and $file =~ /\/vrms$/;

$reason{$pkg} = $reason; }

close REASON ordie "Can't close FILE [$file]: $!\n";}

## Main program starts here.#GetOptions('q|quiet' => \$quiet, 's|sparse' => \$sparse, 'e|explain!' => \$explain, 'reason-dir=s' => \$reasondir, 'd|debug+' => \$debug, 'h|help' => \$help);

if ($help) { usage(); exit 0;}

opendir(REASONDIR, $reasondir) or die "Can't open DIR [$reasondir]: $!\n";# Parse all the reason files in $reasondir except those beginning with# a . or ending with a ~parse_reason_file("$reasondir/$_") foreach (grep {!/~$/ && !/^\./} readdir(REASONDIR));closedir REASONDIR or die "Can't close DIR [$reasondir]: $!\n";

my $statusfile = '/var/lib/dpkg/status';my $is_nonfree = 0; ### preset none found, yetmy %nonfree = ();my $is_other_nonfree = 0; ### preset none found, yetmy %other_nonfree = ();my $is_contrib = 0; ### preset none found, yetmy %contrib = ();my $is_other_contrib = 0; ### preset none found, yetmy %other_contrib = ();my %pkg_status = ();my $pkgcnt = 0;my $clumpcnt = 0;my $dontcarelines = 5; ### no. of lines a non-installed entry may have in the statusfile

my $sysname = "";chop($sysname = `uname -n`);

open(PKG_SOURCE, "< $statusfile") or die "Can't open FILE [$statusfile]: $!\n";

$/ = ""; ### snarf a paragraph at a timewhile(<PKG_SOURCE>) { my $clump = $_; $clumpcnt++; my (@pkglines) = split(/\n/, $clump); ### iff more than $dontcarelines lines, package is installed, so process it ### (speed-up by skipping don't-care entries) if (@pkglines > $dontcarelines) {my $pkg = ""; ### name of this packagemy $pkgstatus = ""; ### statusmy $plan = ""; ### install plan (hold, deinstall, purge, install, etc.)my $state = ""; ### state (ok or ???)my $status = ""; ### status (installed, not-installed, etc.)my $section = ""; ### section this is where non-free is markedmy $shortdescr = ""; ### one-liner description of pkgmy $linenbr = 0; ### current line number of this pkackag's infomy $label = ""; ### junk field (not used, except to catch split values)my $has_pkg = 0; ### reset the markersmy $has_status = 0;my $has_section = 0;

foreach (@pkglines) { chomp; $linenbr++; if (/^Package:/) {($label, $pkg) = split(/:\s+/,$_,2);$pkgcnt++;printf "pkg(%4.4d) pkg=[%s]\n",$pkgcnt,$pkg if $debug >= 1;$has_pkg = 1; ### we have necessary sectionnext; } if (/^Status:/) {my $label = "";($label, $pkgstatus) = split(/:\s+/,$_,2);print "\tpkgstatus=[$pkgstatus]\n" if $debug >= 1;$pkg_status{$pkg} = $pkgstatus;($plan, $state, $status) = split(/\s+/,$pkgstatus);print "\t\tplan=[$plan]\n" if $debug >= 1;print "\t\tstate=[$state]\n" if $debug >= 1;print "\t\tstatus=[$status]\n" if $debug >= 1;$has_status = 1; ### we have necessary sectionnext; } if (/^Section:/) {my $label = "";($label, $section) = split(/:\s+/,$_,2);print "\tsection=[$section]\n" if $debug >= 1;$has_section = 1; ### we have necessary sectionif ($section =~ /contrib|non-free|restricted|multiverse/) { ### read thru rest of array to find descr instead of waiting for it my $found_descr =0; while (! $found_descr) {if ($linenbr > $#pkglines) { ### iff badly formed entry ensure blank description print "\tEEEE shortdescr=[$shortdescr]\n" if $debug >= 1; last;}my $dline = $pkglines[$linenbr++];if($dline =~ /^Description:/) { ($label, $shortdescr) = split(/:\s+/,$dline,2); print "\tshortdescr=[$shortdescr]\n" if $debug >= 1; $found_descr = 1;} } if ($section =~ /contrib/) {if (lc $status eq 'installed') { $is_contrib = 1; $contrib{$pkg} = $shortdescr;} else { $is_other_contrib = 1; $other_contrib{$pkg} = $shortdescr;} } else {if (lc $status eq 'installed') { $is_nonfree = 1; $nonfree{$pkg} = $shortdescr;} else { $is_other_nonfree = 1; $other_nonfree{$pkg} = $shortdescr;} }}last; ### this is last desriptor of package we care about so end loop } else {### un-processed lines from package infoif($debug >= 1) { print "\t\t--- $_\n";} }}if (!$has_status or !$has_pkg) { print STDERR "vrms: ERROR- Badly formed dpkg-status entry #$clumpcnt!\n"; print STDERR " pkg=[$pkg], pkgstatus=[$pkgstatus], section=[$section] \n";}

source code

Page 9: 35 Years of Open Source Software

The Birth of UNIX

Page 10: 35 Years of Open Source Software
Page 11: 35 Years of Open Source Software
Page 12: 35 Years of Open Source Software
Page 13: 35 Years of Open Source Software

UNIX.zip

UNIX-source.zip

Page 14: 35 Years of Open Source Software

t r a d e s e c r e t

Page 15: 35 Years of Open Source Software

t r a d e s e c r e t

most widely anddeeply understood

in the historyof computing

Page 16: 35 Years of Open Source Software

sharinginnovations

&bug fixes

Page 17: 35 Years of Open Source Software
Page 18: 35 Years of Open Source Software
Page 19: 35 Years of Open Source Software
Page 20: 35 Years of Open Source Software

The Birth of Proprietary

Software

Page 21: 35 Years of Open Source Software

1980

Page 22: 35 Years of Open Source Software

proprietary software

Page 23: 35 Years of Open Source Software
Page 24: 35 Years of Open Source Software
Page 25: 35 Years of Open Source Software
Page 26: 35 Years of Open Source Software

sharing

Page 27: 35 Years of Open Source Software

shareware

Page 28: 35 Years of Open Source Software
Page 29: 35 Years of Open Source Software

The Rise of Free Software

Page 30: 35 Years of Open Source Software
Page 31: 35 Years of Open Source Software
Page 32: 35 Years of Open Source Software

1984

Page 33: 35 Years of Open Source Software

Free Software

Page 34: 35 Years of Open Source Software

Free as in speech

Page 35: 35 Years of Open Source Software

Free as in freedom

Page 36: 35 Years of Open Source Software

Free as in beer

Page 37: 35 Years of Open Source Software

1. use

2. copy

3. modify

4. contribute

Page 38: 35 Years of Open Source Software
Page 39: 35 Years of Open Source Software

1989, 1991

GPL

Page 40: 35 Years of Open Source Software

you must extend the

same freedomsto others

Page 41: 35 Years of Open Source Software

copyleft

Page 42: 35 Years of Open Source Software

permissivelicenses

Page 43: 35 Years of Open Source Software

you give completefreedom to

developers

Page 44: 35 Years of Open Source Software
Page 45: 35 Years of Open Source Software
Page 46: 35 Years of Open Source Software
Page 47: 35 Years of Open Source Software
Page 48: 35 Years of Open Source Software

1993

Page 49: 35 Years of Open Source Software

1995

Page 50: 35 Years of Open Source Software

2000

$1,000,000,000

Page 51: 35 Years of Open Source Software

Free Software Becomes

Mainstream

Page 52: 35 Years of Open Source Software
Page 53: 35 Years of Open Source Software

1998

Page 54: 35 Years of Open Source Software
Page 55: 35 Years of Open Source Software
Page 56: 35 Years of Open Source Software
Page 57: 35 Years of Open Source Software
Page 58: 35 Years of Open Source Software
Page 59: 35 Years of Open Source Software
Page 60: 35 Years of Open Source Software
Page 61: 35 Years of Open Source Software

Open Sourceis Everywhere

Page 62: 35 Years of Open Source Software
Page 63: 35 Years of Open Source Software
Page 64: 35 Years of Open Source Software
Page 65: 35 Years of Open Source Software
Page 66: 35 Years of Open Source Software
Page 67: 35 Years of Open Source Software

all software

Page 68: 35 Years of Open Source Software
Page 69: 35 Years of Open Source Software
Page 70: 35 Years of Open Source Software
Page 71: 35 Years of Open Source Software
Page 72: 35 Years of Open Source Software
Page 73: 35 Years of Open Source Software
Page 74: 35 Years of Open Source Software
Page 75: 35 Years of Open Source Software

2005–2007

Page 76: 35 Years of Open Source Software
Page 77: 35 Years of Open Source Software
Page 78: 35 Years of Open Source Software
Page 79: 35 Years of Open Source Software

Software Freedom as Inspiration

Page 80: 35 Years of Open Source Software
Page 81: 35 Years of Open Source Software
Page 82: 35 Years of Open Source Software
Page 83: 35 Years of Open Source Software
Page 84: 35 Years of Open Source Software

open data

Page 85: 35 Years of Open Source Software

open access

Page 86: 35 Years of Open Source Software
Page 87: 35 Years of Open Source Software

@fmarier

[email protected]

Questions?

Page 88: 35 Years of Open Source Software

Photo credits:

ibm 360 with people: http://www.flickr.com/photos/cote/54408562/sizes/l/in/photostream/cdc6600: https://secure.wikimedia.org/wikipedia/en/wiki/File:Personable_Computer.jpgken and dennis with medals: https://secure.wikimedia.org/wikipedia/commons/wiki/File:Medal_lg.jpegwarrington logo: http://wikieducator.org/File:Warrington_logo.pngashs logo: http://wikieducator.org/File:ASHS_logo.pngwanted poster: http://www.flickr.com/photos/mscaprikell/59580038/in/photostream/tape: http://www.flickr.com/photos/leejordan/486911915/tim o'reilly: https://secure.wikimedia.org/wikipedia/commons/wiki/File:Tim_O%27Reilly_in_Foo_China_2007.JPGfsf logo: https://secure.wikimedia.org/wikipedia/en/wiki/File:FSF-Logo.svgtux: https://secure.wikimedia.org/wikipedia/commons/wiki/File:Tux.svgopen source: https://secure.wikimedia.org/wikipedia/commons/wiki/File:Opensource.svgstock market: http://www.flickr.com/photos/thewalkingirony/3051500551/android logo: https://secure.wikimedia.org/wikipedia/en/wiki/File:Android_logo.svgin-flight entertainment: http://www.flickr.com/photos/kalleboo/2473197800/samsung tv: http://www.flickr.com/photos/johannesfreund/2320330661/Linus: http://en.wikipedia.org/wiki/File:Linus_Torvalds.jpegBill Gates: http://en.wikipedia.org/wiki/File:Bill_Gates_in_WEF_,2007.jpgBruce Perens: [not CC] http://perens.com/press/photos/Lawrence Lessig: http://en.wikipedia.org/wiki/File:Lessig_portrait.jpgJimmy Wales: http://en.wikipedia.org/wiki/File:Jimmy_Wales_Fundraiser_Appeal_edit.jpgSteve Ballmer: http://en.wikipedia.org/wiki/File:Steve_ballmer_2007_outdoors2.jpgus department of justice: https://secure.wikimedia.org/wikipedia/en/wiki/File:US-DeptOfJustice-Seal.svg