KnowOS

Knowledge Operating System (KnowOS) is a project for a dynamic system with persistent objects.

It is written on Common Lisp by Mike Travers, JP Massar, and Jeff Shrager as an underlying framework tool for BioLingua.

See ILC 2005 Paper.


Good intentions, but they repeat the usual bullshits about RDBMSs that come from OO-DBMS proponents; citing from ILC 2005 Paper:

An Oracle instance is a virtual machine that allows users to interact with tables and relations as if these were persistent basic elements, and provides many of the above-described services to application programs that operate on tables and relations.
Tables are a 2D representation of relations, so speaking about tables and relations is nonsense. Probably, they are speaking about realations (tables) and relationships (one-to-one [1:1], many-to-one [M:1] and many-to-many [M:M]), represented in the database by foreign key-primary key referential integrity constraints.

[..] and so that it becomes part of the persistent storage space – the files or tables. We feel that this is needlessly myopic; If one wants to work with complex, structured knowledge, one should not have to create it from flat representations [..]
Again, tables are a 2D representation of relations; a relation is a variable which can assume as value sets of points in a n-dimensional discrete space (where n is the number of relation attributes), aka sets of tuples. What does it mean for a n-dimensional discrete space to be flat??

Whereas classical operating systems provide these services for simple data objects (files or tables), a KnowOS provides them for networks of complex objects.
.. and ..
Threading is the way that pointers are maintained between complex objects that have their own first-class status;
They miss completely the fact that the relational data model (rdm) was invented to overcame the deficiencies of hierarchical and network DBMSs (re-proposed in "modern" form as XML-DBMSs and OO-DBMSs).

RDBMSs can cope with hierarchies and networks (graphs) better, in a more dynamic way, because they are not limited by a static representation of these structures as a web of pointers§.

The main difference is this: a RDBMS manages graphs in a declarative way, with relational algebra or calculi which are Collection-Oriented (aka data parallel or set-oriented); hierarchical and network DBMSs manage it procedurally§§ iterating node by node, instead. Also the integrity of such graphs are mantained declaratively by RDBMSs by integrity constraints (again, to express these constraints you have all the power of relational algebra/calculi at your disposal).

Citing again from ILC 2005 Paper:
If one wants to work with complex, structured knowledge, one should not have to create it from flat representations [..]. Instead, complex objects should constitute the basic persistent storage entities that are the domain of the operating system.
rdm has no problems in representing, managing and assuring the integrity of such complex structures; on the contrary, it was invented exactly to overcame the deficiencies of hierarchical and network DBMSs (although SQL DBMSs, violating rdm theory, cause some problems in supporting graphs, above all admitting duplicates).

Now, the evidence:

  1. Chapter 7, Climbing Trees in SQL: Data Hierarchies in PRACTICAL ISSUES IN DATABASE MANAGEMENT, by Fabian Pascal.
  2. TREE-STRUCTURED DATA: A RELATIONAL PERSPECTIVE by C. J. Date.
  3. Oracle documentation, from Oracle Life Sciences Platform (even biological applications, the same target as KnowOS) and Oracle Spatial, Locator, and Location-Based Services:
  4. These projects show clearly that rdm is a pure mathematical theory of data, with no connection whatsoever with a specific implementation; the equations relations = files and tuples = records ARE NONSENSE.
    Here program graphs (for program analysis) are represented as relations at the logical level and as (RO)BDDs at the physical (implementation) level:
    • GBDD - A package for representing relations with BDDs, from Regular Model Checking framework.
    • Jedd: Java Extension for Decision Diagrams project and this example paper Jedd: A BDD-based Relational Extension of Java: whole program analyses based on BDDs; Jedd language abstracts BDDs as database-style relations and operations on relations, and provides static type rules to ensure that relational operations are used correctly. Citing from this paper:
      In developing our approach, it soon became apparent that a simple strategy of providing a Java wrapper to interface with a BDD library was not a good solution, for many reasons. First, we found that the interface provided by the existing BDD libraries is very low level, and as we attempted to express several complex interrelated analyses, understanding and maintaining our code became difficult. Moreover, programming at such a low level was error prone, and errors in our code led to either the BDD library aborting, or worse, to incorrect results. Shortcomings of procedural programming. The implicit nature of the BDD representation made these errors difficult to track down. Furthermore, we found that it is quite difficult to match the memory management in Java with the reference-counter-based schemes employed in the BDD packages. Finally, we found that tuning a BDD-based algorithm requires profiling information about the size and shape of the underlying BDDs at each program step. We had previously developed some ad-hoc methods for visualizing this information, but a more automated approach was needed.
      Our solution, and the topic of this paper, was the development of: (1) Jedd, a language extension to Java, which provides a high-level way of programming BDD-based algorithms based on relations and operations on relations; Advantages of declarative programming. (2) an associated translator which automatically translates Jedd to Java code that efficiently interacts with back-end solvers; and (3) run-time support for memory management, debugging and profiling of BDD operations.
    • bddbddb - A BDD-Based Deductive DataBase project: a tool for easily and efficiently specifying and querying program analyses, specified as programs in Datalog, a standard declarative language for reasoning about relations.
      .. and this example paper Cloning Based Context Sensitive Pointer Alias Analysis Using Binary Decision Diagrams (.PDF) by John Whaley: this paper shows that pointer analysis, and many other queries and algorithms, can be described succinctly and declaratively using Datalog, a logic programming language. Again, advantages of declarative programming.
  5. Other papers on graphs and trees in RDBMSs:

-- MaD70