Trying to articulate some more of my deeply complicated feelings toward the Object Oriented model, one possible axis of difference appears:
Records vs Activities
That is, there are two (no doubt more, but at least two) different ways of thinking about how we use a modern computer (ie, a data-storage, computation, and communication device).
One is the idea of Records. Coming from database theory, which predated electronic computers, going back to card tabulators and in fact writing itself.
In the Record view, a computer is primarily a data storage and retrieval device. Files or tables are collections of records or rows. Records may be mutable or immutable, but often in reality immutable is preferred. Records often correspond to paper documents or other permanent media, though they can be much smaller. Records may be required to be in a standard format and to be rejected if they do not meet this format.
Records relate to Knowledge. Although some may represent secret information, it is their inherent nature that they can be duplicated at will, and they are expected to outlast the context in which they were created.
Activities on the other hand are more like processes, communication channels, sessions, or sets of work to be done. They incorporate the ideas of active machinery (dangerous if interrupted) and social contexts (limited in time and space). They are intended to ensure that some task involving a limited number of participants is done, and done well (to some standard). They impose very strong rules on how that task is done and how those communication channels or dangerous pieces of machinery are used.
Since Activities relate not to Knowledge but to Tasks, they are very tightly bound to their context in time, space, participants, and machinery. It is not sensible to think about duplicating an Activity except in the sense of a pre-planned, standardised factory-like context, so it doesn’t matter if lots of complicated mechanism and setup cost is required to do so. It is also sensible that duplicating an Activity should require lots of permissions, because machinery is inherently dangerous.
The Object metaphor, imo, is based more around the idea of Activities than it is Records. It’s about computation - all computation - as communication between multiple actors to solve a specific task. So the Object mode of design will always think in terms of “who are the participants here” and “what are they trying to achieve”, and then attempt to craft specific computational or social machinery (ie, apps, platforms, startups) to enable this one task. Enabling is also seen in terms of controlling that task.
But I feel that this focus on Activities is increasingly dangerous socially. It empowers platform owners and disempowers platform users. If your task is ad-hoc (or if you’re disliked or overlooked by a powerful government or by powerful economic actors) there may not be a user story for your use-case, and so there may not be any relevant computational object or way of creating one.
The Records view of computing, on the other hand, is almost completely agnostic about who created records or what they will be used for. If you can read and write, you can participate, and create your own unexpected contexts and use-cases. A record is not quite task-agnostic, because the shape of the record will still reflect the needs of the particular use-case it was invented for. But records for one purpose can be rewritten for many new purposes, with no permissions required.
Streaming is activity-based: it’s an authenticated conversation, that can’t be duplicated and where consent can be withheld at any time by a powerful central party. Computing technology is controlling humans and limiting their freedom.
Downloading is records-based: it’s a context-free duplication of knowledge that can be freely used and repurposed without permission. Computing technology is used to expand human freedom.
I think this split gets at why the Object model (as a universalising story about computing, which is how Alan Kay tells it), makes me fundamentally unhappy. I want computers - and especially owners of large computers - to be empty slates as much as possible, to not impose policy over human actions, but to rather follow human orders. Objects give some ability to create valid Records - that’s useful - but they also make it far too easy to restrict the use of those Records in ways that are far too tempting to large platform-owners.
However, even many of the frameworks we have for thinking about Records are still adapted to large corporate data centres rather than personal desktops. We need new models of Records that are personal desktop-sized rather than corporate-sized. We need things midway between folders of documents, SQL tables, and JSON objects or Lisp cons cells. We need Records that can be either a few bytes long or a few terabytes, that can handle video archives or mouse-click messages, that can be either graphs of read-only hashed blocks, or function call stacks. And while class- or type-like enforcement of the shape of a Record is useful, we must be able to completely decouple the creation and use of Records from any online central authorities, including both commercial Cloud corporations like Microsoft / Amazon / Google, and powerful nonprofits like Let’s Encrypt.