Nature of Software

Home
Services
Biography
Publications
Patents
Environment
Contact

Looking to the Changing Nature of Software

for Clues to its Protection

by Michael A. Dryja

* A version of this paper appeared in volume 3, number 2 of the University of Baltimore Intellectual Property Law Journal.

Introduction

            Since the first decisions on the legal protection of computer software beginning more than twenty years ago,[1] the legal world has constantly bickered over the proper intellectual property law mechanism, patent or copyright, for protecting computer software.[2]  From time to time, and seemingly more so as of late, the computer world has chimed in with their own informed opinions on the matter.[3]  For better or for worse, the only conclusion the avid student of this debate can draw with certainty is that this surely is not an underwritten-about area of intellectual property law.  Every Tom, Dick, Jane, and Harry intellectual property attorney, professor, and student has seemingly entered the fray at one time or another.

            With all this serving as a backdrop, the studious reader will no doubt be puzzled at the lack of scholarship on the nature of computer software itself, and the clues it proffers for the legal protection of software.  Few theorists and commentators have bothered probing into the technical nature of software.[4]  Even fewer have attempted to draw conclusions about how software should be protected, based on its underlying nature.[5]  Most oddly, none have acknowledged the changing nature of software in the past twenty years, and how this may in fact explain -- as well as have instigated -- the shift in legal protection of computer software from a copyright-centric to a patent-centric regime.

            This is a curious hole in the literature on computer software.  As any empiricist worth her salt will tell you, understanding the thing that law sets out to regulate will aid in regulating it correctly.  With that lofty goal in mind, this Article attempts to plug this gap in the scholarship on computer software.  We study how the nature of software itself has changed over the years, how the legal protection of software has shifted during this same time period, how the latter phenomena is consistent with the former phenomena, and how the latter may even have come about as a result of the former.

            In Section I., the historical nature of software is examined, introducing the reader to the Turing model of computer software.  After the model is fleshed out in sufficient detail, we quickly usher in the legal implications of this model, discovering how it conforms with a copyright regime for legally protecting software.  In Section II., we fast-forward to the modern-day nature of software, dissecting in great detail the latest buzzword enthralling the computer industry, object-oriented programming.  The legal conclusions reached under this model are discussed, acquainting the reader with object-oriented programming's consistency with a patent scheme for legally protecting software.  We end with Section III., drawing some final conclusions on how patent and copyright might interact to adequately protect software, based on both the Turing and object-oriented models.

I.  From Copyright . . .

A.  The Turing Model

Not widely understood by most legal theorists, but readily acknowledged -- implicitly or explicitly -- by nearly all computer scientists, programmers, and engineers, is the vast transformation computer software has undergone over the past twenty years.  The early copyright decisions, for example, dealt with simplistic software that is a far cry from the complex software of today.[6]  Early software is a horse-and-buggy carriage when compared to the automobile of modern-era software.  An understanding of the historical nature of software, and how it fits into the legal regime protecting intellectual property, will prove fruitful in later justifying how the law currently treats computer software.[7]

In the pioneer days of computer programming, before there were even that many computers to program, in the 1930's and 1940's, computer theorists set up a model of what a computer program "is" that only began to erode in the 1980's.  Alan Turing, one of the early pioneers in the field of computing theory, perhaps most elegantly laid out what a computer program "is" when he described his "Turing machine", a conceptual model for a computational machine, or a computer.[8]  Turing's model accentuated the procedural, serialized approach to computers.[9] 

Under this approach, computer programs have a set and definable beginning, and a set and definable end.  Each program has a goal, and a list of computer instructions that, if constructed properly, will achieve that goal when completed in a step-by-step manner.  A computer processing such a computer program will start at step one, go to step two, then step three, etc., until it has exhausted all the given steps on a program.

That Turing and other first-generation computer scientists conceived of computer programs in this way makes complete sense.  Most of these computer scientists were formally trained in mathematics, and therefore brought with them their mathematics-intensive approaches when tackling the new problem of computer programming.  The construction of computer programs was nothing more than a "mathematical activity".[10]  Programs were driven through "mathematical insight, calculation, and proof, using algebraic laws as simple and elegant as those of elementary arithmetic."[11]

That mathematicians were responsible for the early model of computer software is instrumental in understanding why their model would ultimately have to change as the computer software industry matured.  Computer science must yield to computer engineering when it comes to determining how to reduce theory into practice.  Science is not engineering, although the two are intertwined.[12]  As businesses began adopting on a wide-scale basis the use of computers in their operations, they demanded attention to goals different than those of computer scientists.  Whereas computer scientists concentrate on the cutting edge of technology, centering more on the theoretical than the practical, computer engineers focus on the practical, concentrating their efforts more towards making software more efficient and reliable.[13]

From the simple Turing model of a computer program, several things quickly became clear as founded in this basic theory.  The first is the clear distinction between "code" and "data", the two constituents of a program.  The code is the set of steps a computer will go through, step-by-step, in order to achieve a wanted result.  Conversely, data is that information either fed into the code of a program, used by the code, or generated by the code, in order to assist the code in reaching a program's desired goal.  In lawyerly like terms, computer theorists have thought of code and data as separate from one another "as strictly as Church and State."[14]

For example, consider the simplistic program of achieving the goal of adding three whole numbers.  The user of this program would feed into the code data consisting of three whole numbers.  Call these numbers A, B, and C.  Step one of such a program would add numbers A and B, calling the result D.  Step two of such a program would add numbers D and C, labeling the result E.  The data of the program in this example are the numbers A, B, C, D, and E.  The code consists of the two steps, first adding numbers A and B, and then adding numbers C and D.  In other words, the program's code is the machinery of a program, whereas the data is the raw material processed by the machine.[15]

Most legally oriented people -- and indeed most computer programmers and theorists until the mid to late 1980's -- have trouble appreciating what a big conceptual leap the code/data distinction really is.  After all, conventional thinking goes, to separate data from code, and code from data, seems so intuitive.  Moreover, the alternative does not make much sense on first impression: how can code be data, or data be code?[16]  In part, this reflects how powerful and entrenched Turing's conceptual model is.  From its creation in the late 1930's and early 1940's, forty years passed before even computer experts could fathom an alternative model of computer software, let alone rigorously formulate one.

Before going on to other important features of the Turing conception of computer software, one pragmatically driven aspect of the Turing model, borne out of necessity when composing large programs and not entirely required by the model itself, should be acknowledged.  Among computer programmers and scientists, Turing-type models of computer programs are called procedural models.[17]  The difference between these modern-day incarnations of the Turing model and the original model is primarily an accommodation of the length to which programs have grown.  Turing perhaps would not have predicted that today some 100 billion lines of computer code are in use across the United States.[18]  With programs quickly reaching such great lengths, computer scientists had to figure out how to write programs in such a way so that programmers could easily understand them, both while and after the program is written.

What the scientists ultimately came up with was a tweaking of the original Turing model, rather than a complete overhaul.[19]  Programs were still written for processing by a computer in a step-by-step manner, but now each individual step could itself encompass many steps.  For example, many computer programs have to print data to the screen, where the user can view it.  For the purposes of this example, say that this process requires twenty processing steps.  Under the unmodified Turing model, this means that every time something has to be printed to the screen, the programmer would have to insert these twenty lines of code.  An easier way would be to group all twenty steps of code in what is called a "procedure", or "subroutine", and then, whenever the program has to print something to the screen, merely "call" the print-to-screen procedure rather than having to insert over and over the same twenty steps.

The addition of these procedures, or subroutines, to the basic Turing model does not detract from any of the conclusions and observations that have been drawn, or that will be drawn, about the model itself.  Where, as in Turing's time, programs do not exceed 100 lines in length, the use of procedures is unwarranted.  However, when, as today, programs routinely exceed 10,000 lines, the use of procedures is necessary in order to impose some semblance of order on program-composition processes.  Whatever the label, procedural, program decomposition, etc.,[20] the model itself still remains fundamentally the same.

The second integral aspect of the Turing model is its "verb-object" approach to manipulating data.[21]  The code is primary and is emphasized first; it is the "verb".  Dynamically, the computer proceeds from one step of the code to another, acting on the data, which statically remains in place, as directed by the code.  The data is emphasized only secondarily, and is the "object" of the code's actions.  In other words, the Turing model conceives of data as sitting in one place, while various lines of code do things to the data.[22]

This emphasis on code over data almost necessarily follows from a conception of a computer program consisting of lines of code, and its extraordinary impact on the way computer software is designed is again sometimes easily lost on legally oriented people.  If a program is a collection of lines of code that manipulates data, then, put that way, code does seem more important than data.  A programmer writes code, not data; she spends most of her time with the active -- the code -- and not the passive -- the data.  Data is but a means to an end, an entity processed by the code in order to reach the desired goal of a program.[23]  In fact, many times how the data is structured is nothing more than an afterthought, focused upon only after the code has been written.  The verb-object approach of the Turing model thus serves to wildly overemphasize one half of the code/data dichotomy, to the denigration of the other. 

Again, the attraction to this aspect of the Turing model is largely intuitive.  When we say that "programmers program programs", we usually mean that "programmers compose code".  The alternative does not make much sense: what does it mean for a programmer to instead compose data?  Even if we do not understand the lines of code themselves, we can still admire the intellectual achievement of writing 10,000 lines of code.  In many ways, a program is like a book; the programmer has sat down and actually written something.  Data is a different story.  It is much harder to appreciate the intellectual capital that has gone into, say, constructing a list of 10,000 telephone numbers.  Once more, this reflects how powerful and entrenched the Turing model is -- until recently, most computer programmers would agree that the bulk of programming is -- as well as it should be -- writing code, not designing data.

The problem with the verb-object approach of the Turing model becomes apparent when a line of code expects one type of data but receives another.[24]  For example, in the hypothetical program that adds three numbers A, B, and C, the step of the program that adds numbers A and B and puts the results in D expects that A and B are indeed numbers.  However, an error on the part of the user of this program may instead result in the word "alpha" being placed in A.  The computer may just assume A to be zero, it may crash, or it may do something totally unexpected.  Now, this specific problem is so trivial it will probably never happen.  However, one can imagine the problem arising where one line of code expects a person's state to be listed in the form of a two-letter U.S. Post Office abbreviation (CT, MN, etc.), and another expects it to be listed in the form of a generally accepted abbreviation (Conn., Minn., etc.).

The legal theorist's solution to this problem -- and the solution most favored by computer experts until recently -- may be just to take more care and exercise greater caution when writing a program.  After all, so the argument goes, there is nothing inherent in the Turing model that forces a programmer to utilize the verb-object approach in such a way as to overemphasize the code of a program at the expense of the data.  In other words, even though the verb-object approach is an integral component of the Turing model, this in itself does not excuse the programmer from poorly designing the data component of the program.  Reality, however, frequently falls short of the ideal when push comes to shove, in an era of multiple-authored programs and tight deadlines.  This is especially true where the model itself is biased in favor of code over data, and thus doctrinally albeit subtly nudges the programmer to ignore data.[25]  To this end, the verb-object approach and its corresponding emphasis on code are an integral aspect of the Turing model of computer software.

The final significant aspect of the Turing conception of computer software is the way in which it relates to how programmers writing programs so conceptualized view themselves.  This is important, because how programmers view themselves and their craft frequently becomes the nonprogrammers' perception of what it actually is programmers do. To reuse an previous analogy, a programmer is the author of her artistic work; she is the composer to the program's symphony.[26]   The programmer strives for elegant and beautiful code.  She pores over the available computer languages, picking the one that best suits her needs as a writer chooses a different writing style for composing a book than for writing a poem.  The programmer then carefully constructs her artistry line-by-line, placing commands in the most optimal way, just as a good writer picks just the correct verb that conveys the correct meaning, but which does not overly bog down the rest of the sentence.[27]  Above all else, the programmer is a craftsman, steeped in the part-art and part-science of computer programming as a blacksmith was in the days before the Industrial Revolution.[28]

The nonprogrammer reader may find this description a bit far-fetched.  It may very well be.  But the perception on the part of programmers themselves of what it is they did historically is very close to the author/craftsman metaphor described above.  The fact of the matter is most programmers feel a kinship with their brothers and sisters in the arts, more so than with members of the engineering and scientific community.[29]  To ignore this is ignore a greater reality.  Programmers believe that they are artists first and engineers second.[30]  This perspective shapes the way in which they approach problems, and more importantly, the way in which programs are actually written. 

For example, programmers believe their craft to be domain-independent, in that so long as they are knowledgeable in computer programming, they can apply their craft to any problem, without first becoming versed in the scientific background underlying the problem.[31]  Other engineering and scientific disciplines do not operate this way.  Mechanical engineers may feel competent in designing bridges or brake systems for cars, but not both, even though the underlying mechanical laws are the same for both problems.  Theirs is a tangible, I-can-touch-it discipline; when you get right down to it, a bridge is quite different than a car.  Conversely, programmers do not feel that theirs is a tangibility-oriented craft; rather, theirs is a "solitary, mental, abstract" activity.[32]  They are composing something intangible, not building "tangible, commercial goods."[33]  So long as they know their "computer stuff," it does not matter that they are writing a word-processing program or a stock-trading program -- these are distinctions without a difference.

In sum, Turing programmers operate in a pre-Industrial Revolution time period.[34]  As artists carefully constructing their programs line by line, they crafted each individual program no differently than skilled gunsmiths crafted each individual rifle before Eli Whitney invented interchangeable parts.[35]  In short, they were part-artist and part-mathematician.  Because programming involved creativity unfounded in mathematics, and probably because the world of arts is more glamorous than the world of science, they perceived themselves more as artists than engineers.  Their work, like that of all artists, was imprecise, intangible, and something that could not be reduced to a mere set of rules or guidelines so that others could become as proficient as they in their craft.  Programmers were born, not made.  They strove for elegance and simplicity in their programs, many times placing these goals above efficiency and reliability.  The result of their work was as intangible and abstract as they thought it should be; in short they packed the desired conclusion into their starting premise.

B.  Legal Protection Under the Turing Model

Until at least 1986, with the decision of Whelan Assocs., Inc. v. Jaslow Dental Lab., Inc.,[36] the high-water mark of the era, legal protection of computer software was principally accomplished through copyright law, not patent law.  More recent legal developments stressing patent law over copyright law[37] have left legal theorists scrambling to explain why copyright law is no longer adequate to protect software, or to argue that copyright law never was adequate in the first place to protect software.[38]  This much is certain, however: historically, meaning from the early 1970's through the mid 1980's, copyright law was viewed as the primary legal protection scheme for computer software.[39]

When compared to the backdrop provided by the Turing model of computer software,[40] copyright law easily emerges as the most logical and consistent legal mechanism with which to protect computer software -- especially when compared to its distant cousin, patent law.  Several aspects of the Turing model[41] compel this conclusion.  For example, the code/data distinction and the accompanying verb/object approach and its emphasis on code over data play right into the strengths of copyright law.  The data component of the code/data dichotomy can be conceptualized in one of two ways: as raw data itself (e.g., a list of phone numbers), or as a data structure in which raw data can be placed (e.g., to organize the states in a mailing list according to either their two-letter U.S. Post Office abbreviation -- CT, MN, etc. -- or conversely by their commonly used four-letter abbreviation -- Conn., Minn., etc.).  Either way, copyright law does not extend protection to data.

In the former instance, raw data itself is not protectable under the reasoning provided by Feist Publications, Inc. v. Rural Tel. Serv. Co., Inc.[42]  In Feist, Justice O'Connor, writing for the majority of the Supreme Court, held that the white pages of a telephone directory is not statutory subject matter under copyright law.[43]  Spurning "sweat of the brow" analysis, which explains that copyright protection is given to the collector of data because of the great effort expended by that collector, O'Connor found this analysis contrary to the sine qua non of copyright law, creativity.[44]  Because the collection and arrangement of raw data in an obvious matter exacts less than the modicum of creativity required by copyright law, data is uncopyrightable.  Data stored by computer programs and manipulated by the code found in such programs is no different.[45]

In the latter instance, the data structure used by a computer program to store raw data is not protectable under the reasoning provided by Baker v. Selden.[46]  In Baker, the Supreme Court held that a specially designed accounting form was uncopyrightable.[47]  This is because, pursuant to the idea/expression dichotomy in copyright law wherein only the expression, and not the idea underlying the expression, is copyrightable, the value in such a form lies not in the specific form itself, but in the idea of making such a form in the first place.[48]  In other words, a competitor is prohibited under copyright law from exactly copying the specific form itself (the expression), but not from designing similar such forms (the idea).[49]  Similarly, the data structure utilized by a particular computer program is protected under copyright law only to the extent of its specific expression, which is generally trivial; the idea of using a novel type of data structure, the idea behind the expression, is not protected.

Copyright therefore encourages programmers to deemphasize data.  Similar to the historical nature of software, which deemphasizes the data component of a computer program, copyright law also shies away from extending protection to data.  A computer programmer only concerned about obtaining copyright protection for her program would not want to expend too much effort on the program's data component, because she knows that copyright will afford little protection to the data.  Similarly, if she is steeped in the Turing model of computer software then she will naturally favor the code component of a program over the data component.  In other words, if she starts composing her program only with the thought that she definitely wants copyright protection for it, she would focus her attention on the code component, and even if she does not, she still will arrive in the same place, because following the Turing model will take her there.  Copyright law is consistent with and parallel to the Turing model's deemphasis of the data component of computer software.

Even more consistent with copyright law is how computer programmers approach writing the code segment of a computer program.  Copyright law was originally meant to protect literary works, like books, works of art, music, and, later, films and videos.[50]  When the National Commission on New Technological Uses of Copyrighted Works (CONTU)[51] originally proposed that copyright law should be expanded to protect computer software, one of the more significant opposing arguments was that software is a technology, and therefore different than books, works of art, and music.[52]  To get around this -- and, indeed, this was perhaps the original appeal of providing copyright protection to computer software in the first place -- proponents successfully focused on the other aspect of the hybrid nature of computer software,[53] that besides being a technology, it is also a literary medium, or a text.

The concept that software has a dualistic nature is important, since it underlies much of the disagreement over what legal protection scheme, copyright or patent, is better situated to protect it.  Software is the first technology that has this dual nature, although it may very well not be the last.[54]  Unlike other technology of a more physical nature, like electricity, chemistry, or materials science, its construction medium "happens to be text."[55]  Unlike other literary works whose construction medium is also text, computer software is a technology.[56]  This puts intellectual property law in a conundrum.  Because computer software is both literary work and technology, it "straddles a boundary long assumed by intellectual property law to be unbridgeable."[57]  In a legal regime where patents protect technology and copyrights protect literary works and never the two shall meet, computer software at once fits in both the round socket of patent law, and the square socket of copyright law.[58]  It is quite "protean"[59] indeed.

Since computer programmers see themselves as more artist than engineer under the Turing model of computer software development, copyright law is especially cogent in protecting software.  How programmers express themselves in their programs directly relates to the protection that copyright will afford them.[60]  Under the Turing model, programmers express themselves in code, and therefore it is the code that programmers expect to receive protection.  Copyright law is consistent with this view; as stated above, it does not protect data and data structures.  More specifically, copyright law complements the conclusion drawn from the Turing model that programmers engage in "solitary, mental, abstract" activity.[61]  Copyrightable subject matter is expressed in programs at relatively high levels of abstraction.[62]  Thus, where the programmer thinks of her craft as abstract, copyright law concurs by dispensing protection in accordance to a given level of abstraction within the program.[63]

The significance of this cannot be understated.  Under the Turing model, computer programmers view their work as intangible, abstract creations similar to literary works -- exactly what the copyright regime means to protect.  A programmer composes a program through careful construction of computer language commands, each thoughtfully chosen in order to achieve just the effect the programmer wishes to convey.  It is no accident, then, that copyright was chosen first, over patent, to protect computer software.  The persons receiving these freshly given copyrights seemed no different than other artisans, except that their medium was digital, not physical.  Copyright all along has rewarded those harboring creativity; above everything else, it is this that programmers share with their artist brothers and sisters.

In addition to the process by which Turing programs are created meshing with copyright law, the subject matter, too, is ripe for copyright protection.  In other words, once data is sifted out of a program, justifying protecting the code of a computer program via copyright does not end by pointing out the similarities between programmers and others who routinely receive copyright protection.  This would be incongruous, insofar as it is the subject matter, and not the creator of the subject matter, that is the determinative factor in whether a copyright will be granted.  Here, too, copyright law emerges as the clear and consistent choice when compared against the backdrop provided by the Turing model of computer software.

Ultimately, the code of a computer program under the Turing model is a text, a literary work like any other.[64]  To be sure, this view is incomplete,[65] because of software's inherently dualistic nature.[66]  But at least on one level, this is what it is.  Because protecting text is to large extent what copyright law is all about, it is natural for it to protect computer software as well.  Therefore, copyright law is well prepared to protect a media so closely associated with other subject matter it has protected honorably throughout the ages.  Its vocabulary and concepts are well steeped in protecting traditional textual works, such as novels and poems.  It is but a small step to include the code of computer software under this umbrella of protection. In short, copyright law is well suited to protect computer software as understood under the Turing model.  Like the Turing model, copyright law deemphasizes the importance of data.  The programming process under the Turing model, abstract and craftsman-like, fits well with traditional notions of copyright law.  Finally, the code of a computer program under the Turing model is like any other text protectable by copyright.

This, of course, is only half the story.  Besides understanding how Turing computer software meshes with copyright law, an effort must also be made to investigate why patent law spurned computer software initially -- that is, why courts originally determined that computer software was not best protected under a patent regime.  Luckily, here, too, the Turing model presents us clear answers.  The Supreme Court decisions on the patentability of computer software, Gottschalk v. Benson,[67] Parker v. Flook,[68] and Diamond v. Diehr,[69] left the intellectual property community believing that at worst software was unpatentable and at best was only with great difficulty patented.[70]  Thus, their preoccupation with copyright is understandable.  Today patent law is being increasingly turned to for protecting computer software.[71]  Patent law's initial refusal to protect computer software,[72] however, has much to do with the historical nature of software, as understood under the Turing model.

Under the Turing model, first-generation computer scientists perceived the construction of computer programs as little more than an abstract, intangible mathematical activity.[73]  Their computer programs were a series of mental steps, intangible in nature, borrowing heavily from all that they had learned before in mathematics.  Although they were more artist than scientist in constructing their programs, the programs themselves were primarily mathematical and algorithmic in nature.  Programs were driven through mathematical calculation and proof, plodding along a step-by-step analysis reminiscent of a mathematician plodding along a step-by-step solution to a problem.[74]  Put this way, it is not surprising that patent law spurned computer software.

For example, in Gottschalk v. Benson,[75] Benson unsuccessfully tried to claim an algorithm for BCD[76] to binary conversion, without regard to any application for which it might be used.[77]  Similar to any program under the Turing model, Benson's was abstract and intangible.  He did not link it to any specific physical device, but instead claimed an invention that was quintessentially a Turing machine: numbers were fed into his program, and numbers came out of his program -- with no regard at all for what those numbers meant.  Because "abstract ideas, scientific principles, and laws of nature are not patentable,"[78] the Supreme Court had little choice but to deny Benson's patent application.  Under the "mental steps" doctrine, processes that can be performed using pencil and paper -- and thus are nothing more than an embodiment of a collection of mental steps -- are unpatentable.[79]  That patent law and the Turing model of computer software are inconsistent is therefore quite obvious.  Patent law frowns upon protecting the abstract, the intangible, and that which is nothing more than mathematical algorithm.[80]  Under the Turing model, however, computer software essentially is just that. 

Subsequent Supreme Court decisions show that patent would only protect computer software when software departed from the Turing model.  In Diamond v. Diehr,[81] the Court approved of Diehr's process claim involving the use of an algorithm in a rubber molding process.  Diehr was not claiming solely the mathematical algorithm at issue in his patent application, but only how the algorithm related to the also disclosed rubber molding process.  In this way, he removed his program from the Turing model of computer software.  His was more than mere intangible, mathematical activity; it was in fact a tangible, physical activity only rooted in intangible, mathematical activity.  Diehr was not attempting to claim that his approach was the end-all and know-all to any scientific problem.  Rather, unlike Turing model programmers who believe their programs are applicable to any problem, without regard to the underlying scientific background of that problem,[82] he only claimed competence in computer programs relating to a specific domain, rubber molding.  The Supreme Court approved his patent application, because Diehr did not preempt the use of his mathematical algorithm by others outside of the rubber molding field.[83]

The Freeman-Walter-Abele test, a two-step test for determining the patentability of computer software that evolved through the decisions In re Freeman,[84] In re Walter,[85] and In re Abele,[86] passed down by the Court of Claims and Patent Appeals, also supports patent's inconsistency with the Turing model of computer software.  The basic test is that first a court must determine whether an invention contains a mathematical algorithm.  If it does, it is patentable only if it passes the second step, which is to remove the mathematical algorithm from the claimed invention, and then analyze what remains for patentability.  The gist of the test is to render unpatentable those inventions whose essence and primary focus are only a mathematical algorithm.

If all that is claimed is a Turing computer program, then the patent application will be denied under the Freeman-Walter-Abele test.  Because a computer program under the Turing model is nothing more than a mathematical algorithm carried out by a computer, under the second step of analysis removal of the algorithm from the claimed invention will eliminate the heart and soul of the invention, resulting in an empty unpatentable claim.  Note that the clever claim writer is also frustrated by the test if she tries to satisfy Freeman-Walter-Abele by merely including a specific domain in which the program can operate, but one to which it has no inextricable relation.  In Walter, for example, even though a specific end use was cited in the claim, seismology, the Court, determining that ultimately the claim was nothing more than a collection of mere calculations, denied the patent application.[87]

These decisions all point to the proposition that "a claim that incorporates a mathematical algorithm and defines the solution to a specific problem, and not merely the solution to a mathematical formula, will define patentable subject matter."[88]  Under the Turing model of computer software, however, a computer program does not define a solution to a particular problem.  Computer programmers adhering to the Turing model believe that their knowledge is distributable across any domain, and need not be restrained to any one particular tangible domain -- the software, intangible, the programmer not an engineer but a quasi-artist.  If the programmer believes that her work cuts across physical, tangible boundaries, then patent law cannot afford her protection.  It protects specific solutions to specific problems, and cannot tolerate a proposed solution that solves all problems of its type, regardless of application.  The Turing model, in other words, compels conclusion that the patent regime is incompatible with computer software, as conceived under the model.  If software is the work of an artist, not an engineer, if software is intangible, not tangible, if software is but nothing more than a series of mental steps, patent will not -- because it cannot --protect it.

II.  To Patent . . .

A.  The Object-Oriented Model

A revolution underway in how software is constructed, and what software "is", is changing for the better the fields of computer science and software engineering.  Those unattuned with this revolution -- a group that includes most legal theorists -- are largely ignorant of what these changes are, and what they have in store for how legal protection is afforded to computer software.  The revolution is a sea change, rendering inapplicable all past metaphors used in relation to computer software, including the Turing model.[89]  This new paradigm of computer software is called "object-oriented programming", or OOP, for short.[90]  Object-oriented programming came onto the computer software scene in the 1980's.[91]  Its introduction represented a "massive shift in programming paradigms," and portends eventually a more dramatic impact on computer programmers and computer programming than almost any other event in the short history of computer science.[92]

The basic object-oriented programming model of computer software departs significantly from the historical Turing model.  Under the Turing model, a programmer thinks of code as text, sitting down to write a program book-style -- the program has a clear beginning, and a clear end.  For example, a rudimentary word processing program might allow a user to accomplish two things, entry of text by a user, and output of text to a printer.  The Turing computer programmer would have these two goals in mind as she writes the word processor, line-by-line.  The completed program would consist of a number of lines of code, to be processed by a computer in a step-by-step manner, which would proceed sequentially through the lines of code, until it reached the last line.

The object-oriented computer programmer would approach composition of this word processing program very differently.  Rather than conceptualizing the program as one program consisting of a serial set of lines of code written in order to accomplish two goals, she would instead conceptualize the word processor as encompassing two "objects," a data-entry object, and an output-to-printer object.  Rather than writing one computer program, she essentially would write two smaller programs.  A computer processing this program would, instead of going through a program sequentially, step-by-step, flit the data a user is working on -- the document to be written: a letter, say, or a law review article -- between the two objects as stipulated by the user.

A primary advantage of the object-oriented model of computer softwares comes when the software must be changed.  A common feature of word processors is the ability to check a document to ensure that it contains no spelling errors.  The Turing word processor discussed above would be difficult to modify.  A programmer would have to examine the lines of code she has already written, and attempt to insert more lines to incorporate a spell checker within the word processor, without disturbing the text-entry and output-to-printer features already implemented.  This may be very difficult, especially if the program is "long," i.e., has many lines of code, or if the programmer adding the spell checker is not the same person who originally wrote the word processor.  In very complex programs, understanding what someone else has written and then trying to modify it is many times more difficult and time-consuming than writing a brand-new program from scratch.

That the Turing model is difficult to modify is not difficult to grasp.  The programmer writing the original word processor has only two set goals in mind, text entry and output to printer.  Her finished product is like a bound book.  Adding pages later is difficult to accomplish, and in any case, even if physically possible, the new pages will rarely mesh well with the old pages such that the new book has as consistent a flow as the old book did.  An author wanting to update the book is better off publishing a brand-new book, based on the old one but largely rewritten, even if some of the sentences from the old book are retained.

Compare this to the object-oriented word processor.  There, the programmer does not have any set goals when creating the original word processor, so nothing in the original word processor has to be reconsidered, rewritten, or modified in order to add a spell checker.  Rather, the programmer only has to add a new spell-checking object to the mix.  The computer processing this word processor now has one more object among which to flit a document; the user of this program can now choose among three methods to manipulate text, instead of the previous two ways.

In other words, the object-oriented programmer would not have to examine the lines of code -- the two other objects -- she has already written.  These two objects would remain undisturbed; the programmer would not have to figure out how to insert a spell checker in the midst of a program that already works well, and thus does not take the chance of upsetting the balance of the word processor as it already stands.  If the programmer adding the spell-checking object is not the same person who constructed the original two objects, this is of little consequence; the original objects are little more than "black boxes" to the subsequent programmer -- she only has to know what they do (externally), not how they do it (internally).  The object-oriented word processor is not a book, but a binder.  A programmer has only to click open the binder and add new objects, without fear of upsetting the objects it already contains.

This, in a nutshell, is what object-oriented programming is all about.  The object-oriented programmer sets out her task not by delineating goals that one monolithic program will accomplish, but rather decomposes the problem into cooperating objects, the sum total of which comprise the program.[93]  The objects themselves are discrete components, building blocks that fit together to constitute larger applications.[94]  The object-oriented programmer is not a sculptor who creates a program by starting with a raw slab of marble and after chipping away at it enough ends with a finished statute -- as is a Turing programmer -- but rather is an architect who creates a program by starting with bricks and wooden boards and after putting them together in the right way ends with a finished house.  Object-oriented software is not crafted individually like muskets in Revolutionary days, but rather assembled like Eli Whitney's muskets, using interchangeable parts.[95]

The paradigm shift represented by object-oriented programming results in conclusions regarding computer software much different than those reached under the Turing model.  Unlike under the Turing model, under the object-oriented model "neither code nor data is paramount."[96]  In object-oriented terminology, the code of an object is called a method.[97]  Both code and method are welded together in an object.[98]  That code is important in a computer program is intuitively obvious, and in any case was witnessed under the Turing model.[99]  To wit, a programmer writes code, so it has to be of significance.  However, the appeal of elevating data to equal prominence with code is not so intuitively clear.  The legal reader, though, must satisfy herself that this is indeed the case, or she will miss the sea change that object-oriented programming exemplifies.

For example, we talked about the object-oriented word processing program having three objects: the data-entry object, the output-to-printer object, and the spell-checking object.  This is an accurate description of an object-oriented word processor, but is an incomplete characterization of how such a word processor would operate in an object-oriented computer system, or environment.  In other words, it does not totally explain exactly what an object "is".  The object-oriented word processor's objects each consists of a method -- the code to do a specific task: data entry, output to printer, spell checking, etc. -- as well as a data structure that is specifically described and standardized.  This is how different objects can interact with one another so seamlessly -- inevitably, they all look at data in the same way, i.e., they all have the same structure.

Now, when a user begins work on a new text document within this word processor, she creates another object -- a data-only object that has the same specific data structure as do the word processor's objects.  The data in her object therefore fits hand in glove with any of the word processor's objects, or any other objects having an identically structured data structure.  When she wants to print her document, the computer sends the object containing her document to the output-to-printer object.  Because the data in her object is structured exactly as the output-to-printer object expects it to be, the method in the output-to-printer can simply do what it has to do to the data in the user's object in order to send the document to the printer.  The computer system or environment in which object-oriented computer programs are run is the referee in this entire process, ensuring that one object will only run its methods on the data of another object if both have the same defined data structures.

Put this way, even the nonprogrammer reader should be able to appreciate the importance the object-oriented model places on data.  The code, or method, of an object is never run until it is ensured that the object's data structure is compatible with that of another object's data structure.  An object-oriented programmer designing an object, therefore, picks a preexisting data structure first -- or develops a new one -- before even beginning to write the object's method.  In some ways, then, data is even more important than code under the object-oriented model of computer software.  Under no circumstances can a programmer simply ignore data until after she has written the code.  The object-oriented model forces her to consider data issues first.

This deeper understanding of what objects are all about should also dissuade the nonprogrammer reader from making the common mistake of conceptualizing objects under the object-oriented model as identical to procedures or subroutines under the Turing model of computer software.  Under the Turing model, often repeated lines of code are frequently grouped together in a procedure or subroutine; rather than listing over and over again the same twenty lines, a programmer can first group and then "call" the code rather than relist it.[100]  An object is much more than grouped lines of code.  More important than its code (method) by far is an object's data structure, which has no analog in a procedure.  A subroutine is also what its name implies: it is dependent on the main routine, or main part of the computer program.  An object is co-equal among objects within a program.  In fact, there is no "main routine" that "calls" objects; although the analogy is not particularly apt, to whatever extent there is a "main routine" in an object-oriented program, the objects themselves comprise it.  That the differences between object-oriented and Turing programs are so vast diminishes the significance of the coincidence that both subroutines in Turing programs and objects in object-oriented programs have "groups" of code. 

Another conceptual aspect of object-oriented programs bears this out as well.  In contrast to the "verb-object" approach of the Turing model, the object-oriented model has an "object-verb" approach to manipulating data.[101]  Unlike under the Turing model, where data is static, staying in one place while the code of the program around it dynamically manipulates it,[102] under the object-oriented model the data flits from one method to another, which themselves are visualized as static.[103]  "Programmers no longer think of 'printing an object;' instead they send a message to an object saying, 'Go print yourself.'"[104]  In other words, under the Turing model, data is an elementary school student who sits at the same desk throughout the day as different teachers, or code, come to the student's classroom to teach her different subjects.  Under the object-oriented model, data is the more advanced high school student who throughout the day goes from one classroom to another, to learn subjects from teachers, or code, who always stay in the same room.  With the former, data is static and code is dynamic; with the latter, data is dynamic and code is static.

Because an object-oriented computer program is just that -- object-oriented, and not data- or code-oriented -- a program's data is coequal with a program's code.  Whereas under the Turing model of computer software, the verb-object approach accentuates the overemphasis of code, under the object-oriented model, there is no verb-object approach.  Object-oriented's object-verb approach may be seen as another way in which the model strives for evenhandedness in the treatment given by programmers to both data and code.  By forcing a programmer to consider data issues before writing code, the model ensures that the programmer cannot relegate data to the backbench and start with the usually more exciting code aspect of a program.  Problems of the data-mismatch type,[105] where a program expects a number but receives a letter, for example, do not occur in an object-oriented computer program.  The environment in which object-oriented computer programs operate ensures that objects only manipulate data that they were designed to manipulate.  Understanding this downside to the Turing model, the developers of the object-oriented model designed accordingly so it would not rear its ugly head in object-oriented programs.

The final significant aspect of the object-oriented model of computer software relates to the concerns the developers of the paradigm had when formulating it, and, more crucially, how programmers writing object-oriented programs view themselves and their craft.  Unlike Turing programmers, today's programmers view themselves as more engineer than poet, more professional than craftsman.  Engineering has supplanted craft.[106]  Until recently, the term "software engineering" was considered almost an oxymoron;[107] only with object-oriented programming techniques does the software industry appear to close to making it a reality.[108]  Now, however, software engineering is becoming more product-centered than process-centered,[109] concentrating more on customers' specifications for programs than on the programmers' own feelings towards computer programs and programming.

The software engineer, like all engineers, distinguishes between routine design and innovative design.[110]  Where a specification calls for the solution of familiar problems -- sending text to the printer, getting input from the user, etc. -- the software engineer can merely pick an object that has already been constructed, rather than reinventing a wheel.  This is routine design and is what spares more time for innovative design, formulating solutions to what are truly unique and never before solved problems.  "Original designs are much more rarely needed than routine designs, so the latter is the bread and butter of engineering."[111]

The hallmark of routine design, and therefore the hallmark of software engineering, is reuse of code. Reusing the fruit of other engineers' labor means that an engineer does not have to rewrite everything herself.  The object-oriented model of computer software lends itself particularly well for reuse -- objects are discrete units of software that can be transferred from one program to the next with minimal difficulty.[112]  A software engineer writing an object-oriented word processing program, for example, would not have to build from scratch an output-to-printer object, which is a very standard object.  Instead, she would just take if "off the shelf" and plug it into her program. Reusing objects, not rewriting code, is an advantage that separates the object-oriented model from the Turing model of computer software.

Ultimately, a primary goal of the emerging software engineering discipline is to have "software IC's."[113]  Just as electronics manufacturers buy electrical components (integrated circuits, or "IC's") as commodities, and add value by connecting them in different and customized ways, so would software manufacturers buy software components, and connect them in unique ways to add value.[114]  In this way, "applications can be largely constructed, rather than programmed."[115]  A software engineer would not so much write code as assemble various software components, in order to create a computer program.

This emphasis on reuse separates software engineers following the object-oriented paradigm from computer programmers following the Turing model of computer software.  Turing programmers are hell-bent on not reusing code.  After all, they are artists, not scientists, and would "no more reuse code than Hemingway would have reused other authors' paragraphs."[116]  As with other artists, the Turing programmer does not believe that what she knows is an easily transferrable skill to others.  Programmers are born, not made. Conversely, software engineers follow standard engineering practices that enable even ordinary practitioners to create sophisticated systems that work, unspectacularly, but reliably.[117]

The difference between software engineers and Turing programmers extends to the types of problems which they believe they have a competence for solving.  The Turing programmer believes her programming knowledge is intangible and therefore can be applied across any application domain.[118]  The software engineer, however, understands that specific application-domain knowledge is an important factor in whether she will be able to reliably and efficiently apply her programming knowledge to that domain.[119]  A software engineer, for example, specializing in developing computer programs for designing bridges will realize that although it is "all just computer software," she is unqualified for developing programs for, say, analyzing highly complex chemical structures.

In short, the differences between software engineers and Turing programmers exemplifies the sea change between the object-oriented model and the Turing model for computer software.  The former are product-centered, focusing on their customers, whereas the latter are process-centered, focusing on themselves.  The software engineer attempts to reuse code wherever possible, whereas the Turing programmer never reuses code.  The object-oriented model of computer software compels the programmer to think of herself as an engineer above everything else; the Turing model compels the programmer to think of herself as an artist above everything else.  It is this difference in perception that is typical of the paradigm shift in going from a Turing model to an object-oriented model of computer software.

B.  Legal Protection Under the Object-Oriented Model

Legal protection of computer software has now swung from a mostly copyright-intensive to a mostly patent-intensive scheme.[120]  Although many in the computer industry do not like software patents,[121] the truth of the matter is that they are here to stay.[122]  This does not mean that the kinks of the software-patenting process have all been completely worked out; they have not.  Recent uproar over a single software patent granted to Compton's NewMedia of Carlsbad, Calif.,[123] and its subsequent withdrawal for reexamination, unusual in that the PTO Commissioner himself instigated the reexamination,[124] is proof that more work has to be done on the mechanics of the process.  The computer industry is also unaccustomed to software-patent battles; the press reports news of them in a "what does it mean" sort of way.[125]  This will all soon pass, however, and patents and their litigation will become everyday occurrences in the usual course of the software industry.

When compared to the backdrop provided by the object-oriented nature of computer software,[126] copyright law recedes as the primary or exclusive legal mechanism by which to protect computer software.  Whereas first-generation software decisions, such as Whelan v. Jaslow,[127] extended protection to both the literal elements -- basically, the code or text of a computer program -- and nonliteral elements -- everything else -- of a program, second-generation software decisions, such as Computer Assocs. Int'l, Inc. v. Altai, Inc.,[128] reeled in copyright protection as covering only the literal elements.[129]  Copyright law works when the subject of protection is a literary work, such as a Turing computer program.  The essence of Turing software, after all, is the code.  The focus is on writing the code, and therefore Turing software fits well in a copyright scheme meant foremost to protect code.

However, object-oriented software is so much more than code.  Under an object-oriented model of software, much more important than the code or text of a program is the program's "behavior," for lack of a better term.[130]  Programs are written to bring about a specific variety of behavior.[131]  The focal point of object-oriented software is not so much their code, but the relationships among the various objects of a program.[132]  Software engineers, unlike Turing programmers, are results-oriented, and write software to bring about a definite, tangible result, caring little about the program as an end unto itself.

Against such a perspective of computer software, copyright has little to offer in the way of protection.  Copyright protects artists from infringement of their works.  This presupposes that their works are an end unto themselves.  When, however, the works are not the primary focus, but instead but a means through which to fulfill their goal, copyright has greater difficulty satisfactorily protecting software.  For example, copyright law easily protects the code of a word processing program's output-to-printer object.  This, however, is not what a word-processor "is"; it is not even what an output-to-printer object "is".  A word processing program is greater than even the sum total of its individual constituent objects, encompassing the objects themselves as well as how those objects interrelate.  An object is more than just its code, rather enveloping its method, code, how they interrelate, and how the object relates to other objects.

It is this view of computer software that informed the Second Circuit's decision in Computer Associates v. Altai.[133]  Although not claiming to settle the exact contours of copyright protection for nonliteral elements of software,[134] the Second Circuit did state that the "highly dynamic technology" of computer software causes software to fit into the fabric of copyright law like a "square peg in a round hole."[135]  To this end, in their judgment the decision they handed down would narrow the scope of copyright protection given to computer software.[136]  In other words, although not saying so in as many words, the Second Circuit in Altai realized that a computer program is much more than what it is under the Turing model -- as under the object-oriented model, software goes beyond the literal boundaries of its code.

Therefore, the way in which computer programmers construct software under the object-oriented model belies software's protection under copyright law.  Copyright law does not extend protection to data and data structures.[137]  However, object-oriented programmers recognize data as coequal with code.[138]  Indeed, the object-oriented model compels a programmer to first formulate the data structure she will use for a given program, before writing any code.[139]  Because the object-verb approach of object-oriented programming[140] means that code is no longer the sole or even primary aspect of a computer program, copyright law looms as an incomplete legal solution to protecting computer software.  It can protect the code of objects, but has difficulty extending beyond that to encompass an object's code, the relationship between an object's code and method, and the relationship among objects of a program.

Also inconsistent with copyright law is how computer programmers approach constructing computer software under the object-oriented model.  The object-oriented programmer is a software engineer who purveys what the scope of her program entails in the way of already existing objects, chooses these objects, and then writes new objects only if already existing ones do not satisfy her specifications.  In other words, routine design of computer software is more about assembling software components to construct a program than it is writing code.[141]  That copyright is not well suited to protect software constructed this way is easy to see.

First of all, copyright is meant to protect the works of artists -- books, sculptures, films, etc. -- not the works of scientists and engineers.[142]  This does not mean that it cannot protect the works of software engineers, but surely the spirit of the copyright system cuts against the grain of the way in which the object-oriented model informs computer software development.  Copyright law anticipates a small number of artists, frequently a sole artist, lovingly crafting a work of art that is an end unto itself;[143] a film, for example, does not aid the filmmaker as a means to a further end -- it is the end.  Conversely, copyright law does not anticipate teams of software engineers, usually not working alone, methodically and monastically constructing a computer program piece by piece, and who do not even care about the program itself, since it is but a means to achieve an end -- the customer's specification.

Copyright law has difficulty determining the proper scope of protection for works that are more assembly of preexisting works than original creation.  Much easier it is to protect a Turing program, where most assuredly the programmer reused little if any code written by another programmer, than it is to protect an object-oriented program, based as it is on the presumption that code should be reused.[144]  Again, this does not mean that copyright law cannot stretch to encompass object-oriented program, although it may burst at the seams.  Where software is not a unique creation of an artist, but rather the routine product of an engineer,[145] copyright does not fit so well.  The copyright solution to object-oriented software protection is much messier than the copyright solution to Turing software protection, involving as it does all the second-order considerations of copyright -- derivative works, etc. -- rather than the first-order consideration of creativity.[146]  In a nutshell, copyright does not elegantly wrap around object-oriented software as it does Turing software.

This conclusion also follows from the object-oriented programmer not thinking of herself as engaging in "solitary, mental, abstract" activity, as does the Turing programmer.[147]  The object-oriented programmer thinks of her activity as rooted in a specific knowledge domain, not something that easily transcends all application domains.[148]  This is antithetical to copyright; at the very least there is not much room in copyright law to accommodate such a position.  The idea/expression dichotomy found in copyright law may allow for distinctions based on the level of abstraction present in a given literary work,[149] but this does not translate well into allowing for distinctions based on the application to which a particular computer program has been put.  In part, this is because the whole concept of "applying" something protected by copyright is foreign to basic principles of copyright law.  As stated earlier, copyright presumes that its subject matter is an end unto itself.[150]  Where instead a computer program operates specifically in one problem domain, copyright will not be preclude a finding of infringement for a similar program that operates in a different domain.  In short, copyright does not take into account these differences.

This leaves the engaged reader wondering if patent picks up the slack where copyright has let it loose in the protection of computer software.  Luckily, the object-oriented nature of computer software fits well under a scheme of patent protection, and serves to explain and justify why the computer industry has increasingly turned to patent for protecting computer software. If the sine qua non of copyright is creativity,[151] then the sine qua non of patent is invention.[152]  This enables patent law to permeate an object-oriented program and protect its inventive features, whether or not those features are creative.  As engineers and not artists, object-oriented programmers are more concerned with this -- their innovative designs may not be sufficiently creative to warrant copyright protection, but by virtue of being something that has not been accomplished before, even if mundane, they will surely be more innovative.

The essential "unit" of an object-oriented program -- to wit, an object -- assimilates more easily under patent than copyright.  A Turing programmer writes code the sum total of which will be eligible for copyright registration, to the extent that its entirety is the creation of the programmer.  However, an object-oriented programmer only invents those objects that have not been written before.  She could not copyright the entire program, nor could should even copyright the object, because it will protect only the code of an object, not the relationship between an object's code and data, or the relationship between the object and other objects, both of which are of more value than the code.  In other words, copyright's protection is piecemeal and incomplete.[153]

Conversely, patent does protect the entire object, to the extent that it is inventive.  An object or set of objects that implements a new method can only be protected effectively by patent;[154] copyright at best will only be able to protect a given expression of that method.[155]  The discrete nature of an object also makes it suitable for becoming patentable subject matter.  A Turing program may have inventive aspects that, properly sifted out by the skilled patent prosecutor -- who thus must rely on the ability of the computer programmer to convey to the attorney just what it is about her program that is possibly inventive -- may be patentable.  However, there is no guarantee that the inventive aspects of the program all lie in one place; a few lines of code here, a few lines of code there, all can add up to inventive subject matter.  Conceptually, the Turing program does lend itself for protection under the patent regime.

An object-oriented program, though, is amenable to patent protection.  The nature of the object-oriented model of computer software compels a programmer to consider developing innovative -- and thus possibly inventive -- objects only after she exhausts already existing objects.  When it comes time to consider patenting her computer program, those aspects that may be patentable are already embodied in discrete units -- objects.  This facilitates the patenting process, because the inventiveness of a particular computer program does not have to be squeezed out of the program, but rather already exists as a quasi-independent object ripe for patenting.  The object-oriented model of computer software serves for easy analysis those aspects of a program that may be inventive enough to warrant patent protection.

Besides its compatibility with patent law, the object-oriented model of computer software is the model that underlies patent's shift from nonprotection to protection of computer software in the early 1980's.  The Gottschalk v. Benson[156] and Parker v. Flook[157] Supreme Court decisions denying patent protection to computer software revolved around software based on the Turing model.[158]  In Diamond v. Diehr,[159] the Court finally approved patent protection for computer software -- software based on the object-oriented model of computer software.  There, Diehr successfully claimed a process involving rubber molding.[160]  As such, Diehr's program was based on an object-oriented conception of computer software -- it related to a physical, tangible process.  Unlike a Turing programmer, Diehr only claimed that his program was suitable for use in a specific application domain, rubber molding.  Patent law, unlike copyright law, requires that the "something" to be patented be embodied in something tangible.  Abstract ideas, scientific principles, and laws of nature are not patentable;[161] in other words, that which is intangible is unprotectable.

Object-oriented software is tangible, however, and therefore is patentable subject matter.  Like Diehr, object-oriented programmers strive for constructing solutions in a particular application domain.  Like Diehr's rubber molding algorithm, object-oriented programs are related to something physical.  In other words, patent law and the object-oriented model of computer software are quite consistent with one another.  The model encourages programmers to think of programs as related to something physical and tangible; patent law will only protect software that is related to something physical and tangible.  Patent law will not protect that which is nothing more than mathematical algorithm;[162] the object-oriented conception of software compels programmers to think of themselves as engineers, not mathematicians developing algorithms operable in a vacuum.

Subsequent decisions by lower courts also reveal the inner consistency between patent law and the object-oriented model of computer software.  For example, the Freeman-Walter-Abele test[163] instructs a court to strip away the mathematical algorithm from the claimed invention, and analyze what remains for patentable subject matter.  Under a Turing model of software, nothing will remain.[164]  However, under an object-oriented model, much will remain -- the point of a computer program is not the program itself, but the way it relates to its application domain.  That is, an object-oriented program is an algorithm operating in a tangible application domain so as to solve a particular problem within that domain.  Because it is a means to an end, and not the end itself -- i.e., it is part of a solution, not the solution itself -- upon being removed from the claimed invention, there is still enough "there there" to warrant patent protection.  An object-oriented program, more than just code, is therefore patentable.

Another lower court decision, Arrhythmia Research Technology v. Corazonix Corp.,[165] decided by the Federal Circuit, also shows how patent law is consistent with the object-oriented model of computer software.  The court touched on two things relevant here.  First, the Federal Circuit held that the physical process disclosed in the preamble to a claim can limit the claimed algorithm such that it becomes patentable subject matter.[166]  This ties in with the object-oriented model of computer software, again, because object-oriented programmers believe that their programs are specifically geared towards solving a problem in a particular application domain, and are not so intangible to cut across all application domain boundaries.

Second, the Federal Circuit further developed "end-number analysis," first introduced by the predecessor to the Federal Circuit, the Court of Claims and Patent Appeals, in In re Walters.[167]  End-number analysis holds that if the end result of an algorithm is a number, then this indicates that the algorithm is intangible and not related to any physical process -- and therefore is unpatentable.[168]  However, in Arrhythmia, the Federal Circuit added a nuance to this analysis: so long as the end number represents something physical, this is sufficient enough to render the algorithm tangible and patentable.[169]  Under the object-oriented model, software is always operable in tangible, physical domains.  Any numbers produced by such program would therefore represent something physical and render the program patentable under Arrhythmia.

The object-oriented model of computer software thus supports patent protection for computer software.  The objects of an object-oriented program are ideally suited for patent protection.  As patent law requires, object-oriented software are linked to a tangible, physical application domain.  Object-oriented programmers are more apt to construct an object that is inventive rather than creative.  The entire gloss of the object-oriented paradigm, that computer software is a technology, created to solve problems, fits hand in glove with the stated purposes of the patent system, to serve the public good by rewarding invention.  Patents are the shields of protection wielded by scientists and engineers.  Object-oriented programmers are therefore more inclined to don patent shields than they are copyright shields, meant to protect artists, sculptors, and other creators of literary works.

III.  And Back Again . . .

Although the Turing model of computer software is outdated, replaced by the object-oriented model, computer software will always retain some aspects of the Turing model.  The inherent nature of computer software is dualistic.[170]  The proper scope of protection afforded computer programs in either the copyright or the patent regime reflects the degree to which modern-day software coincides with the Turing model, and the degree to which it does the object-oriented model,respectively.  In this way, copyright and patent interact to form an optimal mesh of legal protection.

By this way of thinking, and by the very nature of computer software being today more object-oriented than Turing,[171] the principal legal mechanism of protection for computer software must be patent law.  The computer industry has come too far in its advances in object-oriented software -- as well as the accompanying maturation in programmers' attitudes of who they are and what it is they actually do -- for the legal world to remain stuck in a copyright-centric regime for protecting software.  The object-oriented model is a veritable sea change in the way computer software is developed, unparalleled thus far in the short history of computer programming.[172]  Its effects on the software engineering community are real and magnificent, forcing the legal world to take pause before asserting that copyright best protects computer software, when copyright is so closely associated with an outdated Turing model of computer software.

The growing pains that patent law has experienced in trying to accommodate the vastly different technology of computer software will unfortunately continue in the near future.  All has not been sorted out on the patent front.  We have already discussed the Federal Circuit's decision in Arrhythmia.[173]  Two other Federal Circuit cases also show that how computer software fits with the exact contours of patent law has not completely been worked out.  Patent prosecutors are always pushing the envelope, and in In re Grams,[174] forced the Federal Circuit to consider the question of just how minimal a physical limitation can be added to a mathematical algorithm in order to produce a statutorily patentable claim.[175]  Where the only non-mathematical step is to obtain the data to feed into the mathematical algorithm, as in Grams' claim, a computer program is not patentable.[176]  The object-oriented model is not dispositive in such a case; it does say that a program must be linked to something physical and tangible, but does not quantify that relationship.  This is left for the courts to decide.

Similarly, in In re Iwahashi,[177] the Federal Circuit had to grapple with another clever prosecutor's patent application.  In Iwahashi, the drafter attempted to physically limit a mathematical algorithm by including a means-plus-function claim that disclosed a specific hardware apparatus.[178]  Read without this claim, the subject matter was clearly unpatentable -- only disclosing a purely intangible algorithm of the type Gottschalk v. Benson[179] ruled statutorily unpatentable.[180]  The Federal Circuit held, however, that a means-plus-function claim adding tangibility read in conjunction with a claim otherwise unpatentable for lack of tangibility sufficiently limits the claim to make it statutorily patentable.[181]  Again, the object-oriented model does not compel this result.  It merely instructs that software must be linked to something tangible, and leaves as a legal technicality for the courts to decide whether a means-plus-function claim can sufficiently disclose this tangible link.

These are just minor details in the greater patent regime successfully based on Diamond v. Diehr.[182]  It is Diehr, and its subsequent fleshing out in Freeman-Walter-Abele,[183] that are the crux of patent's protection of computer software.  These decisions set out the general contours of patent's treatment of computer software, which are supported under the object-oriented model of computer software.[184]  In other words, the object-oriented model points to a regime of protection in which computer software is protected as an inventive technology when related to some external and tangible physical application domain.

If this is our basic model of computer software, if software is more technology than literary work, then the Turing model -- and thus copyright -- fills in whatever holes remain as a result of software being dualistic, and always being a "little bit" literary work even if overwhelmingly technology.  Even though the behavior of a program, and not the text of a program,[185] is where most of a program's value lies, this does not mean that the text can be completely neglected.  It is still one-half of the computer software equation.  Therefore, copyright still has a role to play, however minor, in adequately and properly protecting computer software.

In such a mixed patent-copyright regime for protecting computer software, copyright's role is to protect the code of an object.  The attentive reader will note that in our previous discussion of the object-oriented model of computer software,[186] how the code of an object-oriented program's object is developed was largely ignored.  Its construction is mundane, but takes us back to a Turing model of computer software.  In their inception some fifty-odd years ago, Turing computer programs were necessarily small.  Computers were big, but their computational power was a mere fraction of even the most ordinary machines today.[187] A programmer, therefore, could not write a large, complex Turing program even if she wanted to -- it would not fit in the technology available to her.

Object-oriented programming is in one way a return to computer science's roots.  The code of an individual object has much in common with a complete Turing program from forty years ago.  Both are compact, cohesive pamphlets -- as compared to later-day Turing books, if not encyclopedias -- of code.  Other programmers can easily understand them, because they rarely go beyond five or ten letter-sized pages in length. In other words, when going down to the lowest common-denominator aspect of an object-oriented program -- the code of an individual object -- we surprisingly discover a Turing program.  For all the differences the object-oriented model of computer software represents, deep down it still relies on basic programming principles first embodied in the Turing model.

This is not to suggest in any way that the object-oriented model of computer software is merely window dressing of the Turing model.  It is not.  The object-oriented model represents real advances in the development of computer software.  The concept of decomposing a program into individual objects, the focus on reusing, not rewriting code, the elevation of data to equal importance with code, and the differing object-verb (as opposed to verb-object) approach of object-oriented programs are all marked paradigm shifts in the way computer software is thought of, and developed.  They have no parallel under the Turing model of computer software.  All we say here is that stripping away an object-oriented program's relationships among its constituent objects, and its data structures and the way they relate to code, etc., reveals that the inner-most aspect of an object-oriented program -- the code of an object -- is strikingly similar to a very well-written and compact Turing program.

Copyright fits into the patent scheme for protecting object-oriented software by providing the most optimal way for protecting the text or code of individual objects.  The object-oriented programmer trades her engineer's hat for an artist's hat when writing the code or method of an object.  All that was said before about the construction of Turing program code applies here.[188]  She attempts to write elegant, beautiful code, which is hers and hers alone.  In that moment of time she is Shakespeare writing a sonnet, and can leave her own mark on the software by composing code in a way that no one else can.  For many computer programmers, these are the moments during which they derive the most satisfaction from their jobs, and why they became software engineers in the first place. It is fitting for copyright to protect the programmer's work here, seeing as it is so closely related to any other literary work, including Turing software.

The alternative, only having patent protect all aspects of an object-oriented computer program, leaves many holes in the protection fabric.  For example, say a programmer copies verbatim the code of an object, but does not copy literally the data structure of an object, nor the relationship between the code and data of an object, nor the relationship between this object and other objects of a program.  Literal patent infringement will not be found, because the claimed invention was the total object.  The programmer may include this copied code in such a different object that it does not read on the patent of the object from which it was copied.  Copyright comes to the rescue in this situation.  This programmer essentially created an unauthorized copy of something that was copyrighted.  Conceptually, she copied the chapter of a book word-for-word, and inserted it into her own book.  Under copyright law, a finding of infringement is a no brainer, and does not require difficult analytical leaps.

That copyright law is heading toward protecting computer software in just this way should therefore come as no surprise to the reader gauging legal protection against the backdrop provided by the Turing and object-oriented models of computer software.  Initial copyright decisions gave computer software sweeping copyright protection, coinciding with a Turing model-only perspective of computer software.  Whelan v. Jaslow[189] is the high-water mark of these decisions.  In Whelan, the Third Circuit held that copyright law properly covers both the literal as well as the nonliteral elements[190] of computer software.[191]  Again, if computer programs are Turing programs and nothing more, such a broad reading of copyright law may be necessary to adequately, if ineffectively and improperly, protect software.  Once the object-oriented model took hold of the computer industry, however, other decisions quickly retreated from the bold positions of Whelan.

Most typical in this deflation of copyright is Computer Assocs. v. Altai.[192]  There, the Second Circuit refused to follow Whelan in extending copyright protection to the nonliteral elements of computer software,[193] agreeing with Whelan only inasmuch as it stands for the proposition that copyright rightly protects the literal elements of computer software.[194]  Such a position is informed by an object-orient perspective of software. The object-oriented model reduces the Turing model to explaining only the code of individual objects, not entire computer programs.  The reduction of protection from Whelan to Altai is proportional.  Copyright becomes a mechanism not protecting the primary stuff of computer programs -- that job is relegated to patent law -- but instead becomes a bit player in the protection of software.

This does not suggest that Altai is inconsistent with the greater themes espoused in Whelan.  It is not.[195]  The difference in result between Whelan and Altai does not point to a commensurate difference in treatment of copyright law.  Rather, the difference in result comes more from a difference between the two decisions in the understanding of what computer software "is".  Whelan is best understood as a copyright decision informed only by the Turing model, whereas Altai is a much more mature copyright decision informed also by the object-oriented model of computer software.  In this way, only Altai is consistent with a scheme of legal protection for software suggested by Diehr, plugging in the holes left by that decision.  Conversely, Whelan conflicts with Diehr, rather than complementing it.  Whereas Altai plus Diehr paint a complete legal protection portrait for computer software in which patent and copyright interact harmoniously,[196] Whelan plus Diehr are at odds with one another, each fighting over the same turf, trying to protect the same aspects of software in different ways.[197]

The diligent reader is left with both a congruent model of computer software, and a congruent scheme for legal protection of software.  Software is dualistic in nature, but today decidedly more object-oriented than Turing.  That the Turing model had first dominated the computer world coincides with copyright's early prominence in the legal world as the optimal way to adequately protect computer software.  As the Turing model gave way to the object-oriented model of computer software in the computer world, so did copyright law yield to patent law in the legal world as the best means by which to protect software.  This paradigm shift does not mean that the prior emphasis on the Turing model and the parallel focus on copyright law was all for naught, however.  The object-oriented model is still steeped in the Turing model of computer software, so there is still room in the house of patent for copyright law.  In fact, to the extent that the Turing model complements the object-oriented model in explaining what software is, so, too, does copyright law complement patent law in protecting computer software.  Together, they interact with one another to form a complete mosaic of protection for computer software, each representing one aspect of the dualistic nature of software.

Footnotes. 

[1] See, e.g., Gottschalk v. Benson, 409 U.S. 63 (1972) (denying patent protection for software); Parker v. Flook, 437 U.S. 584 (1978) (denying patent protection); Diamond v. Diehr, 450 U.S. 175 (1981) (granting patent protection); Synercom Technology, Inc. v. University Computing Co., 462 F. Supp. 1003 (N.D. Tex. 1978) (denying copyright protection for software); Stern Elecs., Inc. v. Kaufman, 669 F.2d 852 (2d Cir. 1982) (extending copyright protection); Williams Elecs., Inc. v. Artic Int'l, Inc., 685 F.2d 870 (3d Cir. 1982) (extending copyright protection).

[2] See, e.g., Arthur R. Miller, Copyright Protection for Computer Programs, Databases, and Computer-Generated Works: Is Anything New Since CONTU?, 106 Harv. L. Rev. 977 (1993) [hereinafter Arthur Miller, CONTU] (advocating copyright protection of software); David Bender & Anthony R. Barkume, Patents for Software-Related Inventions, 5 Software L.J. 279 (1992) (advocating patent protection); Richard H. Stern, Tales from the Algorithm War: Benson to Iwahashi, It's Deja Vu All Over Again, 18 A.I.P.L.A.Q.J. 371 (1991) (advocating patent and sui generis protection); John P. Sumner & Steven W. Lundberg, Patentable Computer Program Features as Uncopyrightable Subject Matter, 17 A.I.P.L.A.Q.J. 237 (1989) (advocating patent protection).  [Correct form for AIPLA?]

[3] See, e.g., John P. Barlow, The Economy of Ideas: A Framework for Rethinking Patents and Copyrights in the Digital Age (Everything You Know About Intellectual Property Is Wrong), Wired, Mar. 1994, at 84 (arguing that neither patent nor copyright can adequately protect computer software); Michael J. Miller, Software Patents Must Go, PC Magazine, Mar. 15, 1994, at 79 [hereinafter Michael Miller, Software Patents] (arguing that patent protection of computer software is inappropriate).

[4] But see, e.g., Andrew Johnson-Laird, Reverse Engineering of Software: Separating Legal Mythology from Actual Technology, 5 Software L.J. 331, 334-54 (1992); Dennis S. Karjala, Copyright, Computer Software, and the New Protectionism, Jurimetrics, Fall 1987, at 33, 36-41; Pamela Samuelson, CONTU Revisited: The Case Against Copyright Protection for Computer Programs in Machine Readable Form, 1984 Duke L.J. 663, 672-91 [hereinafter Samuelson, CONTU Revisited].

[5] The author is aware of only two articles that fit this billing.  Most recently, Professor Davis of MIT [expand to Massachusetts Institute of Technology?] has advanced one model of computer software, and its implications for the scope of copyright protection afforded computer software.  Randall Davis, The Nature of Software and Its Consequences for Establishing and Evaluating Similarity, 5 Software L.J. 299 (1992).  In fact, Professor Davis was appointed neutral expert by Judge Pratt in the seminal software copyright infringement case, Computer Assocs. Int'l, Inc. v. Altai, Inc., 775 F. Supp. 544 (E.D.N.Y. 1991), aff'd in part, vacated in part, 982 F.2d 693 (2d Cir. 1992).

     The general counsel for IBM has also submitted a model of computer software, advocating copyright protection of computer software based on this model.  Anthony L. Clapes, Patrick Lynch & Mark R. Steinberg, Silicon Epics and Binary Bards: Determining the Proper Scope of Copyright Protection for Computer Programs, 34 UCLA L. Rev. 1493 (1987).  Both of these models are discussed later in the course of this Article.  See infra Sections I., II.  [Add in the Jurimetrics article I recently found!]

[6] See, e.g., Synercom Technology, Inc. v. University Computing Co., 462 F. Supp. 1003 (N.D. Tex. 1978); Stern Elecs., Inc. v. Kaufman, 669 F.2d 852 (2d Cir. 1982); Williams Elecs., Inc. v. Artic Int'l, Inc., 685 F.2d 870 (3d Cir. 1982).  That computer programs of yesteryear are simplistic compared to those of today, see Computers: Software, Hard Times, Newsweek, Apr. 4, 1994, at 46 (noting that software industry has "matur[ed]" since time when "little products" were created in "Silicon Valley garages").

[7] See infra Section II.B.

[8] Turing is best known for his work in the field of artificial intelligence.  His most famous paper begins with the sentence: "I propose to consider the question 'Can machines think?'".  Alan M. Turing, Computing Machinery and Intelligence, 59 Mind 236, 236 (1950).  For a short but thorough overview of Turing, see Douglas R. Hofstadter, Gödel, Escher, Bach: An Eternal Golden Braid 594-99 (1979).

[9] Ray Duncan, Redefining the Programming Paradigm: The Move Toward OOPLs; Objected Oriented Programming Languages Power Programming, PC Magazine, Nov. 13, 1990, at 526.

[10] Brad J. Cox, Planning the Software Industrial Revolution, IEEE Software, Nov. 1990, at 25 (quoting C.A.R. Hoare).

[11] Id.

[12] Mary Shaw, Prospects for an Engineering Discipline of Software, IEEE Software, Nov. 1990, at 15, 17.

[13] Id. at 20 (characterizing this trend as shifting from "programming-in-the-small" to "programming-in-the-large").  Note that the difference between computer scientists and engineers is quite comparable to the difference between law professors and lawyers.  The former are interested in the most intellectually exciting stuff, which is usually very theoretical, whereas the latter have a job to do, even if sometimes involving the mundane.

[14] Jeffrey Duntemann, OOP: A New Perspective on Code and Data; Object-Oriented Programming, PC Week, Nov. 14, 1988, at 69.

[15] Id.

[16] The clever reader will quickly come up with hypothetical programs that expose the muddiness of the code/data distinction, and thus of the Turing model itself, around the fringes.  For example, a program might be written to stamp in the lower right-hand corner of every outputed page the name of a law firm, say, "Alpha & Beta".  One can conceive of Alpha & Beta having many such programs -- one for its accounting work, one for its billing work, one for its legal work, etc.  If a new partner Gamma were to join the firm, however, all of these programs would be obsolete.  Rather than rewrite each individual program, a programmer might instead decide to write a new program that searches these other programs, changing each instance of "Alpha & Beta" to "Alpha, Beta & Gamma".  Such a program would have data consisting of the original programs' code, thereby violating the Church and State barrier between data and code.
     An even more sacrilegious example, and one frowned upon by every first-term computer-programming instructor worth her salt, is the self-modifying program.  Such a program might in step one rewrite steps nine-fifteen depending on whether certain data is present or not.  For step one, then, steps nine-fifteen are actually data.  Once the computer gets to step nine after already completing steps one-eight, however, step nine ceases to be data and becomes code. 
     These examples merely illustrate that the bright-line code/data distinction is no different than other bright-line distinctions in that exceptions sometimes (and usually) apply.  The exceptions here are minor, however, and clearly do not engulf the rule itself.  In Section II., infra, we will see how modern-era computer software models do obviate this distinction, essentially rendering it useless.

[17] This as distinct from object-oriented models.  See infra Section II.

[18] Robert Haavind, Software's New Object Lesson, High Technology, Feb.-Mar. 1992, at 60, 63.

[19] A complete overhaul of the Turing model is what object-oriented programming set out to do.  See infra Section II.

[20] See, e.g., Davis, supra note 5, at 307-09 (noting that programs are built from other "programs" or subroutines).

[21] Duncan, supra note 9, at 526. 

[22] Id.

[23] Ron Lane, Relearning to Relate; Software Industry Shifting from Modern to Traditional Paradigm, Software Magazine, Apr. 1991, at 136.

[24] Duncan, supra note 9, at 526.

[25] We will see in Section II., infra, that the object-oriented model of computer software removes this bias.

[26] Clapes, supra note 5, at 1511.

[27] Cox, supra note 10, at 26 (noting an Apple Computer programmer's comparing himself to Hemingway).

[28] Haavind, supra note 18, at 66.

[29] Clapes, supra note 5, at 1511; Cox, supra note 10, at 26.  This view is changing however.  See infra Section II.

[30] Max Schindler, Software Development Parallels Computer Hardware Advances, Electronic Design, Feb. 4, 1988, at 115.

[31] Victor R. Basili & John D. Musa, The Future Engineering of Software: A Management Perspective, Computer, Sept. 1991, at 90, 93.  The irony is that this perception is actually incorrect; domain-specific matters greatly.  Id.

[32] Cox, supra note 10, at 26.

[33] Schindler, supra note 30, at 115.

[34] Cox, supra note 10, at 26.

[35] Haavind, supra note 18, at 65.

[36] 797 F.2d 1222 (3d Cir. 1986), cert. denied, 479 U.S. 1031 (1987).

[37] Victoria Slind-Flor, Rethinking Protection; Software Patents, Copyright Issues Shaped the IP landscape in '93, Jan. 24, 1994, Nat'l Law J., at S1 [hereinafter Slind-Flor, Rethinking Protection].

[38] See, e.g., Peter S. Menell, Tailoring Legal Protection for Computer Software, 39 Stan. L. Rev. 1329 (1987) (opposing copyright protection of software).

[39] Karjala, supra note 4, at 34.

[40] See supra Section I.A.

[41] Id.

[42] 499 U.S. 340 (1991).

[43] Id. at 362.

[44] Id. at 359.

[45] See Michael A. Epstein, Protection of Databases Under U.S. Copyright Law: Feist and Its Progeny, J. Proprietary Rts., July 1992, at 2 (analyzing impact of Feist on computer and noncomputer databases, including data stored by computer programs).

[46] 101 U.S. 99 (1879).

[47] Id. at 107.

[48] Id. at 105 (noting difference between "use" and "explanation").

[49] Id.

[50] Sony Corp. of Am. v. Universal City Studios, Inc., 464 U.S. 417, 426 (year).

[51] The 1976 Copyright Act deferred the question of the copyrightability of computer software to CONTU, which Congress had earlier created in 1974.  H.R. Rep. No. 1476, 94th Cong., 2d Sess. 116 (1976), reprinted in 1976 U.S.C.C.A.N. 5731, 5731.  Congress then incorporated CONTU's suggestions wholesale into law.  Computer Software Copyright Act, Pub. L. No. 95-517, § 117, 94 Stat. 3028 (1980) (codified at 17 U.S.C. § 117 (1988)).

[52] Samuelson, CONTU Revisited, supra note 4, at 703-05.

[53] See A. Samuel Oddi, An Uneasier Case for Copyright Than for Patent Protection of Computer Programs, 72 Neb. L. Rev. 351, 445 (1993) (noting dualistic nature of software as part "writing" and part "mechanical process").

[54] Alan Kay, Computer Software, Scientific Am., Sept. 1984, at 53.

[55] Davis, supra note 5, at 315.

[56] Id. (noting that programs "behave" like machines; books do not).

[57] Id. at 301.

[58] Some would have it fit in neither since it fits in both.  See, e.g., Samuelson, Benson Revisited, 39 Emory L.J. 1025, 1128-29 (1990) [hereinafter Samuelson, Benson Revisited] (arguing that "[p]rograms are . . . too much of a mechanical process to fit comfortably in the copyright system and too much of a writing to fit comfortably in the patent system").

[59] Kay, supra note 54, at 53.

[60] Clapes, supra note 5, at 1510.

[61] Schindler, supra note 30, at 115.

[62] Oddi, supra note 53, at 399.

[63] The level at which an abstraction is protected by copyright will ebb and flow according to the specific computer program under consideration.  Arthur Miller, CONTU, supra note 2, at 1012-13.

[64] Davis, supra note 5, at 312.

[65] Id.

[66] See supra text accompanying notes 54-59.

[67] 409 U.S. 63 (1972).

[68] 437 U.S. 584 (1978).

[69] 450 U.S. 175 (1981).

[70] See, e.g., Oddi, supra note 53, at 426 (noting that patent has been able to accommodate all technologies as they have evolved, albeit sometimes "stretching uncomfortably at times to force the seams").

[71] Slind-Flor, Rethinking Protection, supra note 37, at S1.

[72] Bender, supra note 2, at 280-81.

[73] See supra text accompanying notes 10-11, 32.

[74] See Jur Strobos, Stalking the Elusive Patentable Software: Are There Still Diehr or Was It Just a Flook?, 6 Harv. J.L. & Tech. 363, 368 (1993) (noting one model of computer software as an incarnation of "mental steps or business transactions").

[75] 409 U.S. 63 (1972).

[76] BCD stands for binary-coded decimal.  The technical details of BCD are beyond the scope of this article; the non-technical reader needs to know only that it is one scheme by which computers and computer programs internally represent numbers.  BCD is frequently used in devices such as calculators, because it easily allows for a device to determine which segments of a liquid-crystal display (LCD) to light up in order to display a given number.

[77] 409 U.S. at 67-68.

[78] Lance L. Vietzke, Note, Software Patent Protection: A Problem-Solution Theory for Harmonizing the Precedent, 12 Computer L.J. 25, 37 (1993).

[79] Samuelson, Benson Revisited, supra note 58, at 1048.

[80] Roger L. Cook, The Software Industry Anticipates a Flood of Patent Litigation, Nat'l L.J., Jan. 24, 1994, at 52.

[81] 450 U.S. 175 (1981).

[82] See supra text accompanying note 31.

[83] 450 U.S. at 188, 192.

[84] 573 F.2d 1237 (C.C.P.A. 1978).

[85] 618 F.2d 758 (C.C.P.A. 1980).

[86] 684 F.2d 902 (C.C.P.A. 1982).

[87] 618 F.2d at 770.

[88] Vietzke, supra note 78, at 54.

[89] See supra Section I.

[90] See generally Alan Snyder, The Essence of Object: Concepts and Terms, IEEE Software, Jan. 1993, at 31 (identifying and defining key terms of OOP programming languages).

[91] Basili, supra note 31, at 92.

[92] Duncan, supra note 9, at 526.

[93] Oscar Nierstrasz, Simon Gibbs, and Dennis Tsichritzis, Component-Oriented Software Development, Communications of the ACM, Sept. 1992, at 160.

[94] Michael J. Miller, PC Magazine, Software as Building Blocks, June 16, 1992, at 81.

[95] Haavind, supra note 18, 66.

[96] Duntemann, supra note 14, at 69.

[97] Id.  Unfortunately, there is some disagreement over terminology in the object-oriented programming community.  Some say objects consist of both data and method (or code).  See, e.g., id.  Others, however, designate objects as comprising data only, and have methods as independent of objects.  See, e.g., Duncan, supra note 9, at 526.  The difference is entirely academic, and does not affect the conclusions about object-oriented programming drawn here.  For consistency's sake, we use only the former perspective, that objects comprise both data and methods.

[98] Duntemann, supra note 14, at 69.

[99] See supra Section I.

[100] See supra text accompanying note 20.

[101] Duncan, supra note 9, at 526.

[102] See supra text accompanying note 22.

[103] Duncan, supra note 9, at 526.

[104] Duntemann, supra note 14, at 69.

[105] See supra text accompanying notes 24-25.

[106] Mary Shaw, supra note 12, at 15.

[107] Schindler, supra note 30, at 115.

[108] Nierstrasz, supra note 93, at 160.

[109] Cox, supra note 10, 26.

[110] Shaw, supra note 12, at 16.

[111] Id.

[112] Nierstrasz, supra note 93, at 160.

[113] Haavind, supra note 18, at 66.

[114] Id.

[115] Nierstrasz, supra note 93, at 160.

[116] Cox, supra note 10, at 26.

[117] Shaw, supra note 12, at 16.

[118] See supra text accompanying notes 31-33.

[119] Basili, supra note 31, at 93.

[120] Victoria Slind-Flor, Rethinking Protection, supra note 37, at S1.

[121] See, e.g., Michael Miller, Software Patents, supra note 3, at 79 ("I just don't see where patents make much sense in the software industry.").

[122] Bender, supra note 2, at 280-81.

[123] Patent No. 5,241,671 (Aug. 31, 1993); Victoria Slind-Flor, New Patent Chief Reinvents His Job: An Outsider, He Brings an Activist Approach, Nat'l L.J., Feb. 28, 1994, at 1 (noting uproar over issue of Compton patent).

[124] Id.

[125] See, e.g., Lawrence M. Fisher, Will Users Be the Big Losers in Software Patent Battles?, N.Y. Times, Mar. 6, 1994, at F7 (reporting Stac Electronics' victory in Microsoft-Stac suit over Microsoft's infringement of Stac's patent for software compression technology).

[126] See supra Section II.A.

[127] 797 F.2d 1222 (3d Cir. 1986), cert. denied, 479 U.S. 1031 (1987).

[128] 982 F.2d 693 (2d Cir. 1992).

[129] Arthur Miller, CONTU, supra note 2, at 1002.

[130] See Davis, supra note 5, at 315 (noting dualistic nature of software: computer programs are "text" that "behave").

[131] Id.

[132] See Lane, supra note 23, at 136 (noting software's paradigm shift results in emphasis of relationships, not code).

[133] 982 F.2d 693 (2d Cir. 1992).

[134] Id. at 712.

[135] Id.

[136] Id.

[137] See supra text accompanying notes 42-49.

[138] See supra text accompanying notes 96-99.

[139] Id.

[140] See supra text accompanying note 101.

[141] See supra text accompanying note 115.

[142] See Arthur Miller, CONTU, supra note 2, at 982-88.

[143] Id.

[144] See supra text accompanying note 112.

[145] Shaw, supra note 12, at 16.

[146] See supra text accompanying note 44.

[147] Schindler, supra note 30, at 115.

[148] See supra text accompanying notes 31-33.

[149] See supra text accompanying notes 62-63.

[150] See supra text accompanying note 143.

[151] See supra text accompanying note 44.

[152] Office of Technology Assessment, Finding a Balance: Computer Software, Intellectual Property and the Challenge of Technological Change 39 (1992).

[153] Bender, supra note 2, at 285.

[154] Id.

[155] Id.

[156] 409 U.S. 63 (1972).

[157] 437 U.S. 584 (1978).

[158] See supra text accompanying notes 75-80.

[159] 450 U.S. 175 (1981).

[160] Id. at 192-93.

[161] 409 U.S. at 67.

[162] Roger L. Cook, The Software Industry Anticipates A Flood of Patent Litigation, Nat'l L.J., Jan. 24, 1994, at 52.

[163] See supra text accompanying notes 84-87.

[164] Id.

[165] 958 F.2d 1053 (Fed. Cir. 1992).

[166] 958 F.2d at 1059-60.

[167] 618 F.2d 758 (C.C.P.A. 1980).

[168] Id. at 767-68.

[169] 958 F.2d at 1060-61.

[170] See supra text accompanying notes 54-59.

[171] See supra Section II.A.

[172] Duncan, supra note 9, at 526.

[173] See supra text accompanying notes 165-69.

[174] 888 F.2d 835 (Fed. Cir. 1989).

[175] Id. at 839-40.

[176] Id.

[177] 888 F.2d 1370 (Fed. Cir. 1989).

[178] Id. at 1375.

[179] 409 U.S. 63 (1972).

[180] Vietzke, supra note 78, at 37.

[181] 888 F.2d at 1375.

[182] 450 U.S. 175 (1981).

[183] See supra text accompanying notes 84-87.

[184] See supra Section II.B.

[185] To use Professor Davis' terminology.  See Davis, supra note 5, at 312.

[186] See supra Section II.A.

[187] To give the reader not up on these matters a perspective on just how powerful today's computers are compared to the first computers, the average Microsoft Windows-running PC-compatible comes equipped with four megabytes of memory, which is approximately four-million bytes, whereas the first computer, the ENIAC, had less than one kilobyte of memory, or approximately one thousand bytes.  In other words, today's typical machine has over four-thousand-times more memory than did the first computer!

[188] See supra Section I.A.

[189] 797 F.2d 1222 (3d Cir. 1986), cert. denied, 479 U.S. 1031 (1987).

[190] The court termed the nonliteral elements of a computer program the "sequence, structure, and organization," or SSO for short, of a program.  Id. at 1224 n.1.

[191] Id. at 1234.

[192] 982 F.2d 693 (2d Cir. 1992).  Other more recent decisions have also acknowledged with approval the Altai approach to copyright protection of computer software.  See, e.g., Gates Rubber Co. v. Bando Chem. Indus., Ltd., 9 F.3d 823, 1993 U.S. App. LEXIS 27045, at *44 (10th Cir. Oct. 19, 1993).

[193] 982 F.2d at 711-12.

[194] Id.

[195] See Arthur Miller, CONTU, supra note 2, at 1001-02 (arguing that it is more accurate to view Altai as "adopting a series of modifications of Whelan's generalized statements and as using different terminology without deviating markedly from the Whelan court's fundamental reliance on the idea-expression dichotomy").

[196] See Oddi, supra note 53, at 445-46.

[197] See supra note 58.