Heather J. Meeker Silicon Valley Office
Tutorial: What Software Lawyers Need to Know about Software
FOSS Beyond the Basics: Advanced Legal Topics in Open Source and Collaborative Development in the Global Marketplace
Shidler Center University of Washington March 21, 2006, 8:00 a.m.
Software - 1960s to 1970s
Computer software is customdeveloped Most computer systems are large and have unique configurations Languages are procedural (FORTRAN, COBOL, BASIC, C) A computer system costs $100K and up Source code is usually delivered
2
Software - 1980s
Development of DOS/Wintel platform PCs become ubiquitous and standardized Software becomes an off-the-shelf product Source code is not delivered
3
Software - 1990s to 2000s
"Free software" movement Rise of object-oriented programming (e.g. C++, Java) Rise of distributed computing: client-server technology and web servers/Java
4
Source Code, Binary Code, and Compilers
Source Code
Written in “Higher Level Computer Language“ Trained programmer can read, understand, critique, edit and Improve Computer CANNOT use in this form Designed to show logic and structure
Compiler Software
Converts source to machine-readable form Strips out human-readable comments and logic Results in Binary Code - “1’s and 0’s”
Binary Code
Executable by computers Used in binary or “object” form Conventional form of distributed proprietary software Programs written in some languages need not be compiled to be read by a computer (e.g., BASIC, PERL, HTML)
5
Compilers are Similar to Redliners
Compilers are like DeltaView Both are “batch programs” with static input and output files Modifying the output file is not useful, accurate or easy If you want to modify the output, you must change the input file and re-run the program
6
Interpreted languages (Java, PERL)
7
Example: Commented Source Code
main( ) { char line[100]; int i; i = 0; while( (line[i++]=getchar( )) != '\n' ); /*This is the main routine*/ /*allocate a string of up to 100 characters*/ /*i is the index for the position in the string*/ /*initialize the index to zero*/ /*increase n one at a time. While there is still a character to get (i.e., last character is not the ‘\n’ character), get another character*/ /*make sure the last character is null*/ /*print out the line*/ /*end of routine*/
line[i] = '\0'; printf("%d:\t%s", i, line); }
8
Linking
Connects multiple object files to form an executable program Simplifies complex programs by allowing code to be written in smaller, more manageable pieces or modules Modules communicate with each other using references, with the “linker” making sure they correspond properly Dynamic and Static Linking, Inline, are counterparts
9
Header Files
Header files contain the declaration, but not the definitions, of functions A header file:
#define EXAMPLE_H extern int square(int x);
In the source file:
#include "example.h"
The definition, in library file example.n:
int square(int x) { return (x * x); }
10
Library
A Collection of precompiled routines that a program can use Similar to your folder of favorite contract provisions Make code more efficient by storing frequently used code Stored in Object format Linkers automatically look in libraries for routines not found elsewhere
11
Monolithic Architecture
Source File Source File Source File
Compiler Software
Object File
Object File
Object File
Linker
Executable Program
12
Using Libraries
Application Source File
Library
Compiler Software
Object File
Object File
Object File
Linker
Executable Program
13
Static Link
Object File
Object File
Iron bars? Dynamic Link Inline
Object File Object File
Object File Object File
Bungee Cords?
Object File
14
Some Observations
Header files may contain little copyrightable material; only the information that would be in an API. Object-oriented programming means interfaces can be complicated. Dynamic linking only creates the full executable at run time
15
Object Oriented Programming
Class
16
Object Oriented Programming
Class
17
Object Oriented Programming
Function
int square(int x) { return (x * x); }
18
Operating System
Built in layers to communicate with hardware at the most basic levels No application software runs without it Performs the following basic functions:
Allocates memory Executes processes Accesses disks peripherals (such as keyboards) and devices (such as printers) Includes hooks through which applications communicate though application program interfaces (APIs)
An operating system product "distribution" must also include tools like:
compiler tools shell (user interface) tools boot and shutdown scripts
Utilities for Linux were developed by the GNU project run by the Free Software Foundation Monolithic architectures versus loadable kernel modules
19
User Space
Application programs have access to limited function calls within the kernel This “walls off” application programs from performing basic operating system functions “User space” is defined as programs that stay within this boundary The boundary is arbitrary, and defined by the O/S designers through the system protocol
20
Kernel
Base Layer or Foundation of the Operating System Provides the Most Basic “Low Level” Services:
Hardware-Software Interaction Memory Management Process and Task Management Security
21
Our Hypothetical: Alpha and Omega
Alpha Company Account Manager
(proprietary software of Alpha)
Omega Company Database Manager 2.0
(free software DM 1.0 modified by Omega)
Alpha published interface
Omega published interface (dynamic links)
Connector Is this a derivative work of DM2.0?
22
(proprietary, developed by Alpha)
Thank You
For further information, please contact:
Heather J. Meeker
| Greenberg Traurig, LLP 1900 University Avenue, 5th Floor East Palo Alto, California 94303
650.289.7825 | meekerh@gtlaw.com
SV1:25807v3:3-16-06
SV1: #25807v2: 5/31/2006