| > From a purely technical point of view, The technical point of view needs to be combined with the legal one here, and — > At the same time, Oracle’s characterization of their API as “original software” is not entirely off base, as anyone who has spent time and energy creating and API would know. The amount of design and work required to create an elegant and useful API is huge, and while it would irreparably harm software as a field to call it copyrightable, calling it anything other than an “original” work is a weak position. just because something takes a lot of work, that doesn't automatically mean it is copyrightable. An API doesn't implement anything, it describes a function. Even if it describes a lot of functions and they mesh together really well, there's a distinction between "what" a program does and "how" a program does something. To compare with literature copyright, there are a ton of romance novels out there — pretty sure you can find a lot of common patterns on "what" story they tell. However, only the "how" is copyrighted, you can't prevent anyone from writing a story with the same outline as an existing one. (For literature, the problem becomes really tricky since the crossing over from "what" to "how" is kinda fluid; e.g. you can't just swap out character names. Software is actually easier there.) |
Unfortunately, that is also a definition for the whole of programming: describing functions. In Java, the method signature gives only a very incomplete definition, but that is a factor of the programming language itself.
For example, you might wish to imagine a hypothetical language that has a type system so refined that the behaviour of any function is completely described by its type (1). In such a case there would be no difference between its description and its implementation.
(1) We'll leave aside the question of whether this is strictly possible. It would be possible to have more powerful type systems than Java's, and program designs that use such small and clear function definitions, that if you have the type signatures then filling in the code for them is more straightforward than designing the function definitions was in the first place.