SlideShare uma empresa Scribd logo
1 de 88
Baixar para ler offline
The Age of
Incompatible
  Expensive
  Machines
selling hardware
1968

hardware      software
FORTRAN
          COBOL
 Algol
#!/usr/bin/perl                                                                                                                                                                           foreach (@pkglines) {
#                                                                                        close REASON or                                                                                      chomp;
# This program is free software; you can redistribute it and/or modify                die "Can't close FILE [$file]: $!n";                                                                   $linenbr++;
# it under the terms of the GNU General Public License as published by                }                                                                                                       if (/^Package:/) {
# the Free Software Foundation; either version 2 of the License, or                                                                                                                       ($label, $pkg) = split(/:s+/,$_,2);
# (at your option) any later version.                                                 #                                                                                                   $pkgcnt++;
#                                                                                     # Main program starts here.                                                                         printf "pkg(%4.4d) pkg=[%s]n",$pkgcnt,$pkg if $debug >= 1;
# This program is distributed in the hope that it will be useful,                     #                                                                                                   $has_pkg = 1;                    ### we have necessary section
# but WITHOUT ANY WARRANTY; without even the implied warranty of                      GetOptions('q|quiet' => $quiet,                                                                    next;
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the                          's|sparse' => $sparse,                                                                               }
# GNU General Public License for more details.                                          'e|explain!' => $explain,                                                                            if (/^Status:/) {
#                                                                                       'reason-dir=s' => $reasondir,                                                                    my $label = "";
                                                                                        'd|debug+' => $debug,                                                                            ($label, $pkgstatus) = split(/:s+/,$_,2);
use strict;                                                                             'h|help' => $help);                                                                              print "tpkgstatus=[$pkgstatus]n" if $debug >= 1;
use warnings;                                                                                                                                                                             $pkg_status{$pkg} = $pkgstatus;
                                                                                      if ($help) {                                                                                        ($plan, $state, $status) = split(/s+/,$pkgstatus);
use Getopt::Long;                                                                         usage();                                                                                        print "ttplan=[$plan]n" if $debug >= 1;
                                                                                          exit 0;                                                                                         print "ttstate=[$state]n" if $debug >= 1;
# Declaration of important/main variables.                                            }                                                                                                   print "ttstatus=[$status]n" if $debug >= 1;
my $quiet = 0;                                                                                                                                                                            $has_status = 1;                 ### we have necessary section
my $sparse = 0;                                                                       opendir(REASONDIR, $reasondir) or                                                                   next;
my $help = 0;                                                                            die "Can't open DIR [$reasondir]: $!n";                                                             }
my $explain = 1;                                                                      # Parse all the reason files in $reasondir except those beginning with                                  if (/^Section:/) {
my $debug = 0;                                                                        # a . or ending with a ~                                                                            my $label = "";
my $reasondir = '/usr/share/vrms/reasons/';                                           parse_reason_file("$reasondir/$_")                                                                  ($label, $section) = split(/:s+/,$_,2);
my %reason = ();                                                                         foreach (grep {!/~$/ && !/^./} readdir(REASONDIR));                                             print "tsection=[$section]n" if $debug >= 1;
                                                                                      closedir REASONDIR or                                                                               $has_section = 1;                ### we have necessary section
#                                                                                        die "Can't close DIR [$reasondir]: $!n";                                                        if ($section =~ /contrib|non-free|restricted|multiverse/) {
# Auxiliary functions section (FIXME: put them in a file by themselves).                                                                                                                      ### read thru rest of array to find descr instead of waiting for it




                                                                             source code
#                                                                                     my $statusfile = '/var/lib/dpkg/status';                                                                my $found_descr =0;
                                                                                      my $is_nonfree = 0;                      ### preset none found, yet                                     while (! $found_descr) {
# sub usage:                                                                          my %nonfree = ();                                                                                   if ($linenbr > $#pkglines) {
# Input: nothing.                                                                     my $is_other_nonfree = 0; ### preset none found, yet                                                    ### iff badly formed entry ensure blank description
# Output: Messages to stdout telling the usage of the program.                        my %other_nonfree = ();                                                                                 print "tEEEE shortdescr=[$shortdescr]n" if $debug >= 1;
sub usage() {                                                                         my $is_contrib = 0;                      ### preset none found, yet                                     last;
   print <<EOF;                                                                       my %contrib = ();                                                                                   }
Usage: vrms [OPTIONS] ...                                                             my $is_other_contrib = 0; ### preset none found, yet                                                my $dline = $pkglines[$linenbr++];
                                                                                      my %other_contrib = ();                                                                             if($dline =~ /^Description:/) {
--quiet, -q                 Do nothing if there are no non-free packages installed.   my %pkg_status = ();                                                                                    ($label, $shortdescr) = split(/:s+/,$dline,2);
--explain, -e               Give a brief explanation of why a package is non-free,    my $pkgcnt = 0;                                                                                         print "tshortdescr=[$shortdescr]n" if $debug >= 1;
  if available.                                                                       my $clumpcnt = 0;                                                                                       $found_descr = 1;
--sparse, -s                Just list non-free packages, nothing else.                my $dontcarelines = 5;                   ### no. of lines a non-installed entry may have in the     }
--reason-dir=DIR            Use DIR as the reason directory.                          statusfile                                                                                              }
--help, -h                  Display this help.                                                                                                                                                if ($section =~ /contrib/) {
--debug, -d                 Generate debugging information.                                                                                                                               if (lc $status eq 'installed') {
                                                                                      my $sysname = "";                                                                                       $is_contrib = 1;
All options can be prefixed with "no" (eg: --noexplain) to turn them off.             chop($sysname = `uname -n`);                                                                            $contrib{$pkg} = $shortdescr;
EOF                                                                                                                                                                                       } else {
}                                                                                     open(PKG_SOURCE, "< $statusfile") or                                                                    $is_other_contrib = 1;
                                                                                        die "Can't open FILE [$statusfile]: $!n";                                                            $other_contrib{$pkg} = $shortdescr;
# sub parse_reason_file:                                                                                                                                                                  }
# Input: the name of a reason file and the global hash %reason                        $/ = ""; ### snarf a paragraph at a time                                                                } else {
# Output: the hash %reason filled with reasons from the input file                    while(<PKG_SOURCE>) {                                                                               if (lc $status eq 'installed') {
# (FIXME: %reason shouldn't be global)                                                   my $clump = $_;                                                                                      $is_nonfree = 1;
sub parse_reason_file {                                                                  $clumpcnt++;                                                                                         $nonfree{$pkg} = $shortdescr;
   my $file = shift;                                                                     my (@pkglines) = split(/n/, $clump);                                                            } else {
   print "Parsing reason file $filen" if $debug >= 1;                                   ### iff more than $dontcarelines lines, package is installed, so process it                          $is_other_nonfree = 1;
   open(REASON, "<", $file) or                                                           ### (speed-up by skipping don't-care entries)                                                        $other_nonfree{$pkg} = $shortdescr;
die "Can't open FILE [$file]: $!n";                                                     if (@pkglines > $dontcarelines) {                                                                }
                                                                                      my $pkg = "";               ### name of this package                                                    }
   while (my $line = <REASON>) {                                                      my $pkgstatus = "";         ### status                                                              }
chomp $line;                                                                          my $plan = "";                           ### install plan (hold, deinstall, purge, install, etc.)   last;             ### this is last desriptor of package we care about so end loop
# Grab a line of the form 'package: reason', skip if we don't match                   my $state = "";                          ### state (ok or ???)                                          } else {
my ($pkg, $reason) = ($line =~ /^(S+):s+(.*)s*$/) or next;                         my $status = "";            ### status (installed, not-installed, etc.)                             ### un-processed lines from package info
print "'$pkg' because '$reason'n" if ($debug >= 1);                                  my $section = "";           ### section this is where non-free is marked                            if($debug >= 1) {
                                                                                      my $shortdescr = "";        ### one-liner description of pkg                                            print "tt--- $_n";
# If this is _our_ master file, then prefer anything                                  my $linenbr = 0;            ### current line number of this pkackag's info                          }
# else (so that package maintainers can override)                                     my $label = "";                          ### junk field (not used, except to catch split values)        }
next if exists $reason{$pkg} and $file =~ //vrms$/;                                  my $has_pkg = 0;            ### reset the markers                                                   }
                                                                                      my $has_status = 0;                                                                                 if (!$has_status or !$has_pkg) {
$reason{$pkg} = $reason;                                                              my $has_section = 0;                                                                                    print STDERR "vrms: ERROR- Badly formed dpkg-status entry #$clumpcnt!n";
  }                                                                                                                                                                                           print STDERR "              pkg=[$pkg], pkgstatus=[$pkgstatus], section=[$section] n";
                                                                                                                                                                                          }
The Birth of
  UNIX
UNIX.zip

UNIX-source.zip
trade secret
most widely and
 deeply understood
trade secret
   in the history
   of computing
sharing
       innovations
          &
    bug fixes
The Birth of
Proprietary
 Software
1980
proprietary
 software
sharing
shareware
The Rise of
Free Software
1984
Free Software
Free as in speech
Free as in freedom
Free as in beer
1. use
2. copy
3. modify
4. contribute
1989, 1991

  GPL
you must extend the
same freedoms
     to others
copyleft
permissive
 licenses
you give complete
   freedom to
 developers
1993
1995
2000



$1,000,000,000
Free Software
  Becomes
 Mainstream
1998
Open Source
is Everywhere
all software
2005–2007
Software
Freedom as
Inspiration
open data
open access
Questions?

francois@catalyst.net.nz

   @fmarier
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.jpg
ken and dennis with medals: https://secure.wikimedia.org/wikipedia/commons/wiki/File:Medal_lg.jpeg
warrington logo: http://wikieducator.org/File:Warrington_logo.png
ashs logo: http://wikieducator.org/File:ASHS_logo.png
wanted 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_200
fsf logo: https://secure.wikimedia.org/wikipedia/en/wiki/File:FSF-Logo.svg
tux: https://secure.wikimedia.org/wikipedia/commons/wiki/File:Tux.svg
open source: https://secure.wikimedia.org/wikipedia/commons/wiki/File:Opensource.svg
stock market: http://www.flickr.com/photos/thewalkingirony/3051500551/
android logo: https://secure.wikimedia.org/wikipedia/en/wiki/File:Android_logo.svg
in-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.jpeg
Bill Gates: http://en.wikipedia.org/wiki/File:Bill_Gates_in_WEF_,2007.jpg
Bruce Perens: [not CC] http://perens.com/press/photos/
Lawrence Lessig: http://en.wikipedia.org/wiki/File:Lessig_portrait.jpg
Jimmy Wales: http://en.wikipedia.org/wiki/File:Jimmy_Wales_Fundraiser_Appeal_edit.jpg
Steve Ballmer: http://en.wikipedia.org/wiki/File:Steve_ballmer_2007_outdoors2.jpg
us department of justice: https://secure.wikimedia.org/wikipedia/en/wiki/File:US-DeptOfJustice-Seal.svg

Mais conteúdo relacionado

Mais procurados

Design Patterns avec PHP 5.3, Symfony et Pimple
Design Patterns avec PHP 5.3, Symfony et PimpleDesign Patterns avec PHP 5.3, Symfony et Pimple
Design Patterns avec PHP 5.3, Symfony et PimpleHugo Hamon
 
Database Design Patterns
Database Design PatternsDatabase Design Patterns
Database Design PatternsHugo Hamon
 
The History of PHPersistence
The History of PHPersistenceThe History of PHPersistence
The History of PHPersistenceHugo Hamon
 
Symfony2 - extending the console component
Symfony2 - extending the console componentSymfony2 - extending the console component
Symfony2 - extending the console componentHugo Hamon
 
Lithium: The Framework for People Who Hate Frameworks
Lithium: The Framework for People Who Hate FrameworksLithium: The Framework for People Who Hate Frameworks
Lithium: The Framework for People Who Hate FrameworksNate Abele
 
The Zen of Lithium
The Zen of LithiumThe Zen of Lithium
The Zen of LithiumNate Abele
 
Advanced php testing in action
Advanced php testing in actionAdvanced php testing in action
Advanced php testing in actionJace Ju
 
Symfony2, creare bundle e valore per il cliente
Symfony2, creare bundle e valore per il clienteSymfony2, creare bundle e valore per il cliente
Symfony2, creare bundle e valore per il clienteLeonardo Proietti
 
Dutch PHP Conference - PHPSpec 2 - The only Design Tool you need
Dutch PHP Conference - PHPSpec 2 - The only Design Tool you needDutch PHP Conference - PHPSpec 2 - The only Design Tool you need
Dutch PHP Conference - PHPSpec 2 - The only Design Tool you needKacper Gunia
 
Silex meets SOAP & REST
Silex meets SOAP & RESTSilex meets SOAP & REST
Silex meets SOAP & RESTHugo Hamon
 
PERL for QA - Important Commands and applications
PERL for QA - Important Commands and applicationsPERL for QA - Important Commands and applications
PERL for QA - Important Commands and applicationsSunil Kumar Gunasekaran
 
The state of Symfony2 - SymfonyDay 2010
The state of Symfony2 - SymfonyDay 2010The state of Symfony2 - SymfonyDay 2010
The state of Symfony2 - SymfonyDay 2010Fabien Potencier
 
PHP 5.3 and Lithium: the most rad php framework
PHP 5.3 and Lithium: the most rad php frameworkPHP 5.3 and Lithium: the most rad php framework
PHP 5.3 and Lithium: the most rad php frameworkG Woo
 
Command Bus To Awesome Town
Command Bus To Awesome TownCommand Bus To Awesome Town
Command Bus To Awesome TownRoss Tuck
 
The IoC Hydra - Dutch PHP Conference 2016
The IoC Hydra - Dutch PHP Conference 2016The IoC Hydra - Dutch PHP Conference 2016
The IoC Hydra - Dutch PHP Conference 2016Kacper Gunia
 

Mais procurados (20)

Design Patterns avec PHP 5.3, Symfony et Pimple
Design Patterns avec PHP 5.3, Symfony et PimpleDesign Patterns avec PHP 5.3, Symfony et Pimple
Design Patterns avec PHP 5.3, Symfony et Pimple
 
Database Design Patterns
Database Design PatternsDatabase Design Patterns
Database Design Patterns
 
Symfony2 - OSIDays 2010
Symfony2 - OSIDays 2010Symfony2 - OSIDays 2010
Symfony2 - OSIDays 2010
 
The History of PHPersistence
The History of PHPersistenceThe History of PHPersistence
The History of PHPersistence
 
PHP and MySQL
PHP and MySQLPHP and MySQL
PHP and MySQL
 
Shell.php
Shell.phpShell.php
Shell.php
 
Symfony2 - extending the console component
Symfony2 - extending the console componentSymfony2 - extending the console component
Symfony2 - extending the console component
 
Lithium: The Framework for People Who Hate Frameworks
Lithium: The Framework for People Who Hate FrameworksLithium: The Framework for People Who Hate Frameworks
Lithium: The Framework for People Who Hate Frameworks
 
The Zen of Lithium
The Zen of LithiumThe Zen of Lithium
The Zen of Lithium
 
Advanced php testing in action
Advanced php testing in actionAdvanced php testing in action
Advanced php testing in action
 
Symfony2, creare bundle e valore per il cliente
Symfony2, creare bundle e valore per il clienteSymfony2, creare bundle e valore per il cliente
Symfony2, creare bundle e valore per il cliente
 
Dutch PHP Conference - PHPSpec 2 - The only Design Tool you need
Dutch PHP Conference - PHPSpec 2 - The only Design Tool you needDutch PHP Conference - PHPSpec 2 - The only Design Tool you need
Dutch PHP Conference - PHPSpec 2 - The only Design Tool you need
 
Silex meets SOAP & REST
Silex meets SOAP & RESTSilex meets SOAP & REST
Silex meets SOAP & REST
 
PhpBB meets Symfony2
PhpBB meets Symfony2PhpBB meets Symfony2
PhpBB meets Symfony2
 
PERL for QA - Important Commands and applications
PERL for QA - Important Commands and applicationsPERL for QA - Important Commands and applications
PERL for QA - Important Commands and applications
 
The state of Symfony2 - SymfonyDay 2010
The state of Symfony2 - SymfonyDay 2010The state of Symfony2 - SymfonyDay 2010
The state of Symfony2 - SymfonyDay 2010
 
PHP 5.3 and Lithium: the most rad php framework
PHP 5.3 and Lithium: the most rad php frameworkPHP 5.3 and Lithium: the most rad php framework
PHP 5.3 and Lithium: the most rad php framework
 
Command Bus To Awesome Town
Command Bus To Awesome TownCommand Bus To Awesome Town
Command Bus To Awesome Town
 
Php Enums
Php EnumsPhp Enums
Php Enums
 
The IoC Hydra - Dutch PHP Conference 2016
The IoC Hydra - Dutch PHP Conference 2016The IoC Hydra - Dutch PHP Conference 2016
The IoC Hydra - Dutch PHP Conference 2016
 

Destaque

Open Source Software - A Guide to Innovation
Open Source Software - A Guide to InnovationOpen Source Software - A Guide to Innovation
Open Source Software - A Guide to InnovationKonstantyn Spasokukotskiy
 
1 rapid prototyping model
1 rapid prototyping model1 rapid prototyping model
1 rapid prototyping modeldelaco
 
Copyright in Software and Open Source licensing
Copyright in Software and Open Source licensingCopyright in Software and Open Source licensing
Copyright in Software and Open Source licensingRowan Wilson
 
Transmedia Storytelling and Digital Advertising
Transmedia Storytelling and Digital AdvertisingTransmedia Storytelling and Digital Advertising
Transmedia Storytelling and Digital AdvertisingPaperCliQ Comunicação
 
Free and open source software
Free and open source softwareFree and open source software
Free and open source softwareFrederik Questier
 
10 Reasons To Use Open Source Software-Defined Networking
10 Reasons To Use Open Source Software-Defined Networking10 Reasons To Use Open Source Software-Defined Networking
10 Reasons To Use Open Source Software-Defined NetworkingVala Afshar
 
Open source software vs proprietary software
Open source software vs proprietary softwareOpen source software vs proprietary software
Open source software vs proprietary softwareLavan1997
 
OPEN SOURCE SEMINAR PRESENTATION
OPEN SOURCE SEMINAR PRESENTATIONOPEN SOURCE SEMINAR PRESENTATION
OPEN SOURCE SEMINAR PRESENTATIONRitwick Halder
 
Vulnerability analysis in multics
Vulnerability analysis in multicsVulnerability analysis in multics
Vulnerability analysis in multicssreeja_16
 

Destaque (9)

Open Source Software - A Guide to Innovation
Open Source Software - A Guide to InnovationOpen Source Software - A Guide to Innovation
Open Source Software - A Guide to Innovation
 
1 rapid prototyping model
1 rapid prototyping model1 rapid prototyping model
1 rapid prototyping model
 
Copyright in Software and Open Source licensing
Copyright in Software and Open Source licensingCopyright in Software and Open Source licensing
Copyright in Software and Open Source licensing
 
Transmedia Storytelling and Digital Advertising
Transmedia Storytelling and Digital AdvertisingTransmedia Storytelling and Digital Advertising
Transmedia Storytelling and Digital Advertising
 
Free and open source software
Free and open source softwareFree and open source software
Free and open source software
 
10 Reasons To Use Open Source Software-Defined Networking
10 Reasons To Use Open Source Software-Defined Networking10 Reasons To Use Open Source Software-Defined Networking
10 Reasons To Use Open Source Software-Defined Networking
 
Open source software vs proprietary software
Open source software vs proprietary softwareOpen source software vs proprietary software
Open source software vs proprietary software
 
OPEN SOURCE SEMINAR PRESENTATION
OPEN SOURCE SEMINAR PRESENTATIONOPEN SOURCE SEMINAR PRESENTATION
OPEN SOURCE SEMINAR PRESENTATION
 
Vulnerability analysis in multics
Vulnerability analysis in multicsVulnerability analysis in multics
Vulnerability analysis in multics
 

Semelhante a 35 Years of Open Source Software

Object::Franger: Wear a Raincoat in your Code
Object::Franger: Wear a Raincoat in your CodeObject::Franger: Wear a Raincoat in your Code
Object::Franger: Wear a Raincoat in your CodeWorkhorse Computing
 
Perl Intro 7 Subroutines
Perl Intro 7 SubroutinesPerl Intro 7 Subroutines
Perl Intro 7 SubroutinesShaun Griffith
 
Good Evils In Perl (Yapc Asia)
Good Evils In Perl (Yapc Asia)Good Evils In Perl (Yapc Asia)
Good Evils In Perl (Yapc Asia)Kang-min Liu
 
Perl Bag of Tricks - Baltimore Perl mongers
Perl Bag of Tricks  -  Baltimore Perl mongersPerl Bag of Tricks  -  Baltimore Perl mongers
Perl Bag of Tricks - Baltimore Perl mongersbrian d foy
 
Perl from the ground up: objects and testing
Perl from the ground up: objects and testingPerl from the ground up: objects and testing
Perl from the ground up: objects and testingShmuel Fomberg
 
Utility Modules That You Should Know About
Utility Modules That You Should Know AboutUtility Modules That You Should Know About
Utility Modules That You Should Know Aboutjoshua.mcadams
 
BSDM with BASH: Command Interpolation
BSDM with BASH: Command InterpolationBSDM with BASH: Command Interpolation
BSDM with BASH: Command InterpolationWorkhorse Computing
 
Shell实现的windows回收站功能的脚本
Shell实现的windows回收站功能的脚本Shell实现的windows回收站功能的脚本
Shell实现的windows回收站功能的脚本Lingfei Kong
 
Introduction to Moose
Introduction to MooseIntroduction to Moose
Introduction to Moosethashaa
 
Object Oriented Programming with PHP 5 - More OOP
Object Oriented Programming with PHP 5 - More OOPObject Oriented Programming with PHP 5 - More OOP
Object Oriented Programming with PHP 5 - More OOPWildan Maulana
 
Drush Productivity FTW - DUG @ Krimson
Drush Productivity FTW - DUG @ KrimsonDrush Productivity FTW - DUG @ Krimson
Drush Productivity FTW - DUG @ KrimsonKristof Van Roy
 
Programming in perl style
Programming in perl styleProgramming in perl style
Programming in perl styleBo Hua Yang
 
Good Evils In Perl
Good Evils In PerlGood Evils In Perl
Good Evils In PerlKang-min Liu
 

Semelhante a 35 Years of Open Source Software (20)

Bag of tricks
Bag of tricksBag of tricks
Bag of tricks
 
Object::Franger: Wear a Raincoat in your Code
Object::Franger: Wear a Raincoat in your CodeObject::Franger: Wear a Raincoat in your Code
Object::Franger: Wear a Raincoat in your Code
 
Lecture19-20
Lecture19-20Lecture19-20
Lecture19-20
 
Lecture19-20
Lecture19-20Lecture19-20
Lecture19-20
 
Perl Intro 7 Subroutines
Perl Intro 7 SubroutinesPerl Intro 7 Subroutines
Perl Intro 7 Subroutines
 
Good Evils In Perl (Yapc Asia)
Good Evils In Perl (Yapc Asia)Good Evils In Perl (Yapc Asia)
Good Evils In Perl (Yapc Asia)
 
Perl Bag of Tricks - Baltimore Perl mongers
Perl Bag of Tricks  -  Baltimore Perl mongersPerl Bag of Tricks  -  Baltimore Perl mongers
Perl Bag of Tricks - Baltimore Perl mongers
 
Perl from the ground up: objects and testing
Perl from the ground up: objects and testingPerl from the ground up: objects and testing
Perl from the ground up: objects and testing
 
Subroutines
SubroutinesSubroutines
Subroutines
 
PHP Tips & Tricks
PHP Tips & TricksPHP Tips & Tricks
PHP Tips & Tricks
 
Utility Modules That You Should Know About
Utility Modules That You Should Know AboutUtility Modules That You Should Know About
Utility Modules That You Should Know About
 
BSDM with BASH: Command Interpolation
BSDM with BASH: Command InterpolationBSDM with BASH: Command Interpolation
BSDM with BASH: Command Interpolation
 
My shell
My shellMy shell
My shell
 
Shell实现的windows回收站功能的脚本
Shell实现的windows回收站功能的脚本Shell实现的windows回收站功能的脚本
Shell实现的windows回收站功能的脚本
 
Introduction to Moose
Introduction to MooseIntroduction to Moose
Introduction to Moose
 
Object Oriented Programming with PHP 5 - More OOP
Object Oriented Programming with PHP 5 - More OOPObject Oriented Programming with PHP 5 - More OOP
Object Oriented Programming with PHP 5 - More OOP
 
Drush Productivity FTW - DUG @ Krimson
Drush Productivity FTW - DUG @ KrimsonDrush Productivity FTW - DUG @ Krimson
Drush Productivity FTW - DUG @ Krimson
 
Perl basics for Pentesters
Perl basics for PentestersPerl basics for Pentesters
Perl basics for Pentesters
 
Programming in perl style
Programming in perl styleProgramming in perl style
Programming in perl style
 
Good Evils In Perl
Good Evils In PerlGood Evils In Perl
Good Evils In Perl
 

Mais de Francois Marier

Security and Privacy settings for Firefox Power Users
Security and Privacy settings for Firefox Power UsersSecurity and Privacy settings for Firefox Power Users
Security and Privacy settings for Firefox Power UsersFrancois Marier
 
Getting Browsers to Improve the Security of Your Webapp
Getting Browsers to Improve the Security of Your WebappGetting Browsers to Improve the Security of Your Webapp
Getting Browsers to Improve the Security of Your WebappFrancois Marier
 
Hardening Firefox for Security and Privacy
Hardening Firefox for Security and PrivacyHardening Firefox for Security and Privacy
Hardening Firefox for Security and PrivacyFrancois Marier
 
Security and Privacy on the Web in 2016
Security and Privacy on the Web in 2016Security and Privacy on the Web in 2016
Security and Privacy on the Web in 2016Francois Marier
 
Privacy and Tracking Protection in Firefox
Privacy and Tracking Protection in FirefoxPrivacy and Tracking Protection in Firefox
Privacy and Tracking Protection in FirefoxFrancois Marier
 
Security and Privacy on the Web in 2015
Security and Privacy on the Web in 2015Security and Privacy on the Web in 2015
Security and Privacy on the Web in 2015Francois Marier
 
Integrity protection for third-party JavaScript
Integrity protection for third-party JavaScriptIntegrity protection for third-party JavaScript
Integrity protection for third-party JavaScriptFrancois Marier
 
Integrity protection for third-party JavaScript
Integrity protection for third-party JavaScriptIntegrity protection for third-party JavaScript
Integrity protection for third-party JavaScriptFrancois Marier
 
Supporting Debian machines for friends and family
Supporting Debian machines for friends and familySupporting Debian machines for friends and family
Supporting Debian machines for friends and familyFrancois Marier
 
Outsourcing your webapp maintenance to Debian
Outsourcing your webapp maintenance to DebianOutsourcing your webapp maintenance to Debian
Outsourcing your webapp maintenance to DebianFrancois Marier
 
Easy logins for Ruby web applications
Easy logins for Ruby web applicationsEasy logins for Ruby web applications
Easy logins for Ruby web applicationsFrancois Marier
 
Easy logins for JavaScript web applications
Easy logins for JavaScript web applicationsEasy logins for JavaScript web applications
Easy logins for JavaScript web applicationsFrancois Marier
 
You're still using passwords on your site?
You're still using passwords on your site?You're still using passwords on your site?
You're still using passwords on your site?Francois Marier
 
Killing Passwords with JavaScript
Killing Passwords with JavaScriptKilling Passwords with JavaScript
Killing Passwords with JavaScriptFrancois Marier
 
Securing the Web without site-specific passwords
Securing the Web without site-specific passwordsSecuring the Web without site-specific passwords
Securing the Web without site-specific passwordsFrancois Marier
 
Easy logins for PHP web applications
Easy logins for PHP web applicationsEasy logins for PHP web applications
Easy logins for PHP web applicationsFrancois Marier
 
Persona: a federated and privacy-protecting login system for the whole Web
Persona: a federated and privacy-protecting login system for the whole WebPersona: a federated and privacy-protecting login system for the whole Web
Persona: a federated and privacy-protecting login system for the whole WebFrancois Marier
 
Taking the pain out of signing users in
Taking the pain out of signing users inTaking the pain out of signing users in
Taking the pain out of signing users inFrancois Marier
 

Mais de Francois Marier (20)

Security and Privacy settings for Firefox Power Users
Security and Privacy settings for Firefox Power UsersSecurity and Privacy settings for Firefox Power Users
Security and Privacy settings for Firefox Power Users
 
Getting Browsers to Improve the Security of Your Webapp
Getting Browsers to Improve the Security of Your WebappGetting Browsers to Improve the Security of Your Webapp
Getting Browsers to Improve the Security of Your Webapp
 
Hardening Firefox for Security and Privacy
Hardening Firefox for Security and PrivacyHardening Firefox for Security and Privacy
Hardening Firefox for Security and Privacy
 
Security and Privacy on the Web in 2016
Security and Privacy on the Web in 2016Security and Privacy on the Web in 2016
Security and Privacy on the Web in 2016
 
Privacy and Tracking Protection in Firefox
Privacy and Tracking Protection in FirefoxPrivacy and Tracking Protection in Firefox
Privacy and Tracking Protection in Firefox
 
Security and Privacy on the Web in 2015
Security and Privacy on the Web in 2015Security and Privacy on the Web in 2015
Security and Privacy on the Web in 2015
 
Integrity protection for third-party JavaScript
Integrity protection for third-party JavaScriptIntegrity protection for third-party JavaScript
Integrity protection for third-party JavaScript
 
URL to HTML
URL to HTMLURL to HTML
URL to HTML
 
Integrity protection for third-party JavaScript
Integrity protection for third-party JavaScriptIntegrity protection for third-party JavaScript
Integrity protection for third-party JavaScript
 
Supporting Debian machines for friends and family
Supporting Debian machines for friends and familySupporting Debian machines for friends and family
Supporting Debian machines for friends and family
 
Outsourcing your webapp maintenance to Debian
Outsourcing your webapp maintenance to DebianOutsourcing your webapp maintenance to Debian
Outsourcing your webapp maintenance to Debian
 
URL to HTML
URL to HTMLURL to HTML
URL to HTML
 
Easy logins for Ruby web applications
Easy logins for Ruby web applicationsEasy logins for Ruby web applications
Easy logins for Ruby web applications
 
Easy logins for JavaScript web applications
Easy logins for JavaScript web applicationsEasy logins for JavaScript web applications
Easy logins for JavaScript web applications
 
You're still using passwords on your site?
You're still using passwords on your site?You're still using passwords on your site?
You're still using passwords on your site?
 
Killing Passwords with JavaScript
Killing Passwords with JavaScriptKilling Passwords with JavaScript
Killing Passwords with JavaScript
 
Securing the Web without site-specific passwords
Securing the Web without site-specific passwordsSecuring the Web without site-specific passwords
Securing the Web without site-specific passwords
 
Easy logins for PHP web applications
Easy logins for PHP web applicationsEasy logins for PHP web applications
Easy logins for PHP web applications
 
Persona: a federated and privacy-protecting login system for the whole Web
Persona: a federated and privacy-protecting login system for the whole WebPersona: a federated and privacy-protecting login system for the whole Web
Persona: a federated and privacy-protecting login system for the whole Web
 
Taking the pain out of signing users in
Taking the pain out of signing users inTaking the pain out of signing users in
Taking the pain out of signing users in
 

Último

Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rick Flair
 
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Mark Goldstein
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
Connecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfConnecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfNeo4j
 
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesHow to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesThousandEyes
 
Scale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterScale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterMydbops
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Hiroshi SHIBATA
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsNathaniel Shimoni
 
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...panagenda
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxLoriGlavin3
 
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Alkin Tezuysal
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxLoriGlavin3
 
Sample pptx for embedding into website for demo
Sample pptx for embedding into website for demoSample pptx for embedding into website for demo
Sample pptx for embedding into website for demoHarshalMandlekar2
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersNicole Novielli
 
UiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPathCommunity
 
Potential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsPotential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsRavi Sanghani
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxLoriGlavin3
 
Assure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyesAssure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyesThousandEyes
 
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...Scott Andery
 

Último (20)

Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...
 
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
Connecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfConnecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdf
 
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesHow to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
 
Scale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterScale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL Router
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directions
 
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
 
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
 
Sample pptx for embedding into website for demo
Sample pptx for embedding into website for demoSample pptx for embedding into website for demo
Sample pptx for embedding into website for demo
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software Developers
 
UiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to Hero
 
Potential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsPotential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and Insights
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
 
Assure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyesAssure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyes
 
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
 

35 Years of Open Source Software

  • 1.
  • 2. The Age of Incompatible Expensive Machines
  • 3.
  • 4.
  • 6. 1968 hardware software
  • 7. FORTRAN COBOL Algol
  • 8. #!/usr/bin/perl foreach (@pkglines) { # close REASON or chomp; # This program is free software; you can redistribute it and/or modify die "Can't close FILE [$file]: $!n"; $linenbr++; # it under the terms of the GNU General Public License as published by } if (/^Package:/) { # the Free Software Foundation; either version 2 of the License, or ($label, $pkg) = split(/:s+/,$_,2); # (at your option) any later version. # $pkgcnt++; # # Main program starts here. printf "pkg(%4.4d) pkg=[%s]n",$pkgcnt,$pkg if $debug >= 1; # This program is distributed in the hope that it will be useful, # $has_pkg = 1; ### we have necessary section # but WITHOUT ANY WARRANTY; without even the implied warranty of GetOptions('q|quiet' => $quiet, next; # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 's|sparse' => $sparse, } # GNU General Public License for more details. 'e|explain!' => $explain, if (/^Status:/) { # 'reason-dir=s' => $reasondir, my $label = ""; 'd|debug+' => $debug, ($label, $pkgstatus) = split(/:s+/,$_,2); use strict; 'h|help' => $help); print "tpkgstatus=[$pkgstatus]n" if $debug >= 1; use warnings; $pkg_status{$pkg} = $pkgstatus; if ($help) { ($plan, $state, $status) = split(/s+/,$pkgstatus); use Getopt::Long; usage(); print "ttplan=[$plan]n" if $debug >= 1; exit 0; print "ttstate=[$state]n" if $debug >= 1; # Declaration of important/main variables. } print "ttstatus=[$status]n" if $debug >= 1; my $quiet = 0; $has_status = 1; ### we have necessary section my $sparse = 0; opendir(REASONDIR, $reasondir) or next; my $help = 0; die "Can't open DIR [$reasondir]: $!n"; } my $explain = 1; # Parse all the reason files in $reasondir except those beginning with if (/^Section:/) { my $debug = 0; # a . or ending with a ~ my $label = ""; my $reasondir = '/usr/share/vrms/reasons/'; parse_reason_file("$reasondir/$_") ($label, $section) = split(/:s+/,$_,2); my %reason = (); foreach (grep {!/~$/ && !/^./} readdir(REASONDIR)); print "tsection=[$section]n" if $debug >= 1; closedir REASONDIR or $has_section = 1; ### we have necessary section # die "Can't close DIR [$reasondir]: $!n"; if ($section =~ /contrib|non-free|restricted|multiverse/) { # Auxiliary functions section (FIXME: put them in a file by themselves). ### read thru rest of array to find descr instead of waiting for it source code # my $statusfile = '/var/lib/dpkg/status'; my $found_descr =0; my $is_nonfree = 0; ### preset none found, yet while (! $found_descr) { # sub usage: my %nonfree = (); if ($linenbr > $#pkglines) { # Input: nothing. my $is_other_nonfree = 0; ### preset none found, yet ### iff badly formed entry ensure blank description # Output: Messages to stdout telling the usage of the program. my %other_nonfree = (); print "tEEEE shortdescr=[$shortdescr]n" if $debug >= 1; sub usage() { my $is_contrib = 0; ### preset none found, yet last; print <<EOF; my %contrib = (); } Usage: vrms [OPTIONS] ... my $is_other_contrib = 0; ### preset none found, yet my $dline = $pkglines[$linenbr++]; my %other_contrib = (); if($dline =~ /^Description:/) { --quiet, -q Do nothing if there are no non-free packages installed. my %pkg_status = (); ($label, $shortdescr) = split(/:s+/,$dline,2); --explain, -e Give a brief explanation of why a package is non-free, my $pkgcnt = 0; print "tshortdescr=[$shortdescr]n" if $debug >= 1; if available. my $clumpcnt = 0; $found_descr = 1; --sparse, -s Just list non-free packages, nothing else. my $dontcarelines = 5; ### no. of lines a non-installed entry may have in the } --reason-dir=DIR Use DIR as the reason directory. statusfile } --help, -h Display this help. if ($section =~ /contrib/) { --debug, -d Generate debugging information. if (lc $status eq 'installed') { my $sysname = ""; $is_contrib = 1; All options can be prefixed with "no" (eg: --noexplain) to turn them off. chop($sysname = `uname -n`); $contrib{$pkg} = $shortdescr; EOF } else { } open(PKG_SOURCE, "< $statusfile") or $is_other_contrib = 1; die "Can't open FILE [$statusfile]: $!n"; $other_contrib{$pkg} = $shortdescr; # sub parse_reason_file: } # Input: the name of a reason file and the global hash %reason $/ = ""; ### snarf a paragraph at a time } else { # Output: the hash %reason filled with reasons from the input file while(<PKG_SOURCE>) { if (lc $status eq 'installed') { # (FIXME: %reason shouldn't be global) my $clump = $_; $is_nonfree = 1; sub parse_reason_file { $clumpcnt++; $nonfree{$pkg} = $shortdescr; my $file = shift; my (@pkglines) = split(/n/, $clump); } else { print "Parsing reason file $filen" if $debug >= 1; ### iff more than $dontcarelines lines, package is installed, so process it $is_other_nonfree = 1; open(REASON, "<", $file) or ### (speed-up by skipping don't-care entries) $other_nonfree{$pkg} = $shortdescr; die "Can't open FILE [$file]: $!n"; if (@pkglines > $dontcarelines) { } my $pkg = ""; ### name of this package } while (my $line = <REASON>) { my $pkgstatus = ""; ### status } chomp $line; my $plan = ""; ### install plan (hold, deinstall, purge, install, etc.) last; ### this is last desriptor of package we care about so end loop # Grab a line of the form 'package: reason', skip if we don't match my $state = ""; ### state (ok or ???) } else { my ($pkg, $reason) = ($line =~ /^(S+):s+(.*)s*$/) or next; my $status = ""; ### status (installed, not-installed, etc.) ### un-processed lines from package info print "'$pkg' because '$reason'n" if ($debug >= 1); my $section = ""; ### section this is where non-free is marked if($debug >= 1) { my $shortdescr = ""; ### one-liner description of pkg print "tt--- $_n"; # If this is _our_ master file, then prefer anything my $linenbr = 0; ### current line number of this pkackag's info } # else (so that package maintainers can override) my $label = ""; ### junk field (not used, except to catch split values) } next if exists $reason{$pkg} and $file =~ //vrms$/; my $has_pkg = 0; ### reset the markers } my $has_status = 0; if (!$has_status or !$has_pkg) { $reason{$pkg} = $reason; my $has_section = 0; print STDERR "vrms: ERROR- Badly formed dpkg-status entry #$clumpcnt!n"; } print STDERR " pkg=[$pkg], pkgstatus=[$pkgstatus], section=[$section] n"; }
  • 10.
  • 11.
  • 12.
  • 15. most widely and deeply understood trade secret in the history of computing
  • 16. sharing innovations & bug fixes
  • 17.
  • 18.
  • 19.
  • 21. 1980
  • 23.
  • 24.
  • 25.
  • 28.
  • 29. The Rise of Free Software
  • 30.
  • 31.
  • 32. 1984
  • 34. Free as in speech
  • 35. Free as in freedom
  • 36. Free as in beer
  • 37. 1. use 2. copy 3. modify 4. contribute
  • 38.
  • 39. 1989, 1991 GPL
  • 40. you must extend the same freedoms to others
  • 43. you give complete freedom to developers
  • 44.
  • 45.
  • 46.
  • 47.
  • 48. 1993
  • 49. 1995
  • 51. Free Software Becomes Mainstream
  • 52.
  • 53. 1998
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 76.
  • 77.
  • 78.
  • 80.
  • 81.
  • 82.
  • 83.
  • 86.
  • 88. 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.jpg ken and dennis with medals: https://secure.wikimedia.org/wikipedia/commons/wiki/File:Medal_lg.jpeg warrington logo: http://wikieducator.org/File:Warrington_logo.png ashs logo: http://wikieducator.org/File:ASHS_logo.png wanted 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_200 fsf logo: https://secure.wikimedia.org/wikipedia/en/wiki/File:FSF-Logo.svg tux: https://secure.wikimedia.org/wikipedia/commons/wiki/File:Tux.svg open source: https://secure.wikimedia.org/wikipedia/commons/wiki/File:Opensource.svg stock market: http://www.flickr.com/photos/thewalkingirony/3051500551/ android logo: https://secure.wikimedia.org/wikipedia/en/wiki/File:Android_logo.svg in-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.jpeg Bill Gates: http://en.wikipedia.org/wiki/File:Bill_Gates_in_WEF_,2007.jpg Bruce Perens: [not CC] http://perens.com/press/photos/ Lawrence Lessig: http://en.wikipedia.org/wiki/File:Lessig_portrait.jpg Jimmy Wales: http://en.wikipedia.org/wiki/File:Jimmy_Wales_Fundraiser_Appeal_edit.jpg Steve Ballmer: http://en.wikipedia.org/wiki/File:Steve_ballmer_2007_outdoors2.jpg us department of justice: https://secure.wikimedia.org/wikipedia/en/wiki/File:US-DeptOfJustice-Seal.svg