Ken Dickey on a new OS...

Kenneth Dickey kend0@earthlink.net
Thu, 11 May 2000 18:24:22 -0700


Francois-Rene Rideau wrote:
> 
...
> I'm wondering if you know the TUNES project, and have any comments on it:

Wow! Encyclopedic!  I very much like people who learn from history.  [So much bad reinvention takes place!].  Some very cool ideas.

[I have not had much chance to do more than a quick scan, but..]

My major concerns about such a project are:

  * Funding (How to eat while doing this).

  * Target/Vision/Coherence issues (How to narrow goals and strategies to what can be accomplished with resources at hand).

  * Technology reuse/leverage (Not being able to do everything from fundamentals, how to converge on and leverage what is there and how to energize/grow/leverage existing communities; where to contribute, how to grow).

  * I know how hard the goalset is to achieve [It is a lot of work by many people over years/decades => requires organizational persistence and learning].


> (note that the archives for the LispOS list are also around there:
>         http://lists.tunes.org/cgi-bin/wilma/lispos
> ). The project needs some core code and a manager.
> I've proved unable to fulfill that task up to now.
> If you feel like it, I'd happily offer the task to you...

I have the background but at this point I would have to be paid to do the work.  [You can scan my general background included as HTML, below].  [I'll review the archive soon].

> I invite you to include tunes@tunes.org in your replies...
> 
> > SYSTEM PRINCIPLES FOR RELIABLE, USEFUL, PERSONAL COMPUTER SYSTEMS
> >
> > [...] radical rethinking [...]
> Been doing that a lot.
> Unhappily, not been doing much anything else
> (e.g. coding, writing PhD thesis, etc).
> 
> > - SELF CENTERING (homeostatic)
> > - SELF DESCRIBING
> I call tend to put all that under the concept "reflection".

My concept of 'reflection' does not quite cover this.  I tend to think of reflection as a low-level implementation substrate/strategy.

By SELF CENTERING I mean self 'healing'.  I.e. tendency toward stability and usability in the presence of an uncertain world and unexpected circumstances.  I.e. as system I find that some of my code/hw does not verify (e.g. checksum) and I take action to [1] repair, [2] work around, [3] communicate the problem(s) as a typical part of system behavior.

By SELF DESCRIBING I mean that the user can always ask "what is going on?", "what components are present?", "why am I getting no response here?", and so forth.  I.e. the UI supports explinations.


> >     - Backup is continuous
> Unhappily, in absence of battery backed-up TRAM,
> this is either very expensive,
> or subject to some delay (which is completely uncontrollable with IDE,
> somewhat controllable with SCSI).

There is 'ephemeral state' and there is 'transacted state'.  When significant state transitions take place they are always transacted and have been logged to stable media.  If the power fails and is restored, the system should not only be able to recover data but also to recover system state, which may include "replaying conversations/interactions" from logfiles (e.g. to reestablish 'live' distributed connections).  Ephemeral state is lost.  This ephemeral and transacted distinction must be managed explicitly.

> 
> > - UI RELIABLE AND CONSISTENT    [Visibility & Control]
> Good.
> 
> > QUESTIONS:
> >
> > - What are the rules/rubrics for developers?  How checked?
> > - What HW & SW Technologies support the above?
> > - What Baseline Components are Required?
> 
> I think your problematic is correct.
> My general opinion is that reflection dynamically allows
> for new static invariants to be enforced and taken advantage of.

Good substrate mechanism, but it must be reflected/abstracted/filtered/presented to the user in comprehensable ways.


> Would sending the full description of a man, destroying the original in the
> process, so he be reconstituted back light-years further be a valid means of
> transportation? Or would it be killing him and making a different man?

Yes.  [Do you walk to school, or take a lunch?  8^]


Cheers,
-KenD
============= Original Scribblings
=============>
File:       "System Principles"
Implements: Notes on System Principles for reliable, useful, personal
            computing devices
Author:     Ken Dickey
Date:       2000 March 20
Updated:    2000 March 21


SYSTEM PRINCIPLES FOR RELIABLE, USEFUL, PERSONAL COMPUTER SYSTEMS

Over time I have come to the conclusion that there needs to be a radical rethinking of 'consumer
computing'.  I had thought that the rise of the comsumer and networking would increase reliability and
usability because of consumer demand.  Instead it appears that 'consumers' now put up with crashing cell
phones.  

It is time to rethink the fundamental strategies we use to build computing  systems implementing tools
and devices for ordinary people.

In accord with modern thinking on health, one should think of 'self healing' systems.


- SELF CENTERING (homeostatic)

    - Model of Self (endomorphic)
    - Consistency monitoring; self check
    - State & feedback driven centering procedures
    - Both HW & SW components can be 'hot swaped'


- STATE CONSISTENCY

    - Component & Data self check (incl checksums) at all levels
    - State is Transacted
        - Schema Evolution
        - Component Update w Compatability (incl version) Constraints 
            [legal component set -> transcient -> legal component set]
    - Backup is continuous (logfile) with transaction completions noted
        - can always delete transcient state, replay inputs from a checkpoint
        - if transactions are local, can undo system state to previous
          [=> special markers for distributed transaction undo]
        - Backup/undo a normal part of system behavior
            - can decide to uninstall a newer version of a component and then 
            replay transactions with old component


- SELF DESCRIBING

    - Can always answer the questions:
        - What can I do here?
        - What is going on? [Activities]
        - What is there? (what hw & sw subsystems/components are installed?)
        - What is this component doing?
        - Why the delay? Is it sane?  What can I do about it?
        - Can I install/uninstall/update this component?  
            -> What is affected?  What required?  What provided?
        
        
- UI RELIABLE AND CONSISTENT    [Visibility & Control]
    
    - UI never 'blocks'; User always feels system is immediately responsive
    - All user interface actions are visible
        - Either immediate (visual) response or visual indicator of an
        action (e.g. mouse click) queued on a specific component.
    - Clean separation between UI layer (always responsive) and underlying
      components/applications (may be waiting, or compute bound)
        - UI able to move, resize, scale, display menu/click/mouse 
        events/actions w/o blocking on component/application response
    - Universal undo/redo (modulo non-local transacted commits)
        - Including component install/uninstall/update
    - Component/App can always indicate what is it doing (continuously or 
      by request) even when it is compute bound or blocked.
   

==============================================================
QUESTIONS:

- What are the rules/rubrics for developers?  How checked?
    - Design for self-test, fault diagnosis & fault repair
    - Break compute bound computations into chunks [Agenda control structure]
    - Provide explanations of actions: Explanatory Model
    - Undo/Redo & Transactions
    - Compatibily Constraints
    - Provides/Requires
    - Save/restore 

- What HW & SW Technologies support the above?
  [E.g. (sw):
        'Garbage Collection' (automatic storage reclamation)
            is a powerful consistency checker;
        Closures aid in undo/state consistency, agenda control structures;
        Object System
        Recoverable Exceptions
        Lexical & Dynamic variables & Dynamic Wind
        Full Programming Environment
        et cetera.. ]
        
        - Use partial evaluation and runtime code generation aid in reducing 
        system footprint in restricted resource environments (e.g. Embeded).

- What Baseline Components are Required?
    - Ontology Database [Explanations; Provides/Requires] [XML]
    - Language Runtime (sub)System(s)
    - Constraint Checker
    - Transaction System
    - Component Manager; Data Manager
    - Regulatory/Healing System
        - Self Test System Manager/Scheduler
        - Diagnostic System
        - Repair System
    - GUI [Manager]
    - Event Manager
    - IO Manager
    - Time Manager
    - Process Manager
    - Device Manager
    - Security Manager
    - Per Task
        - Storage Manager
            Memory, Stable Storage
        - Resource Custodians
            - Threads
            - Events [Eventspaces]
            - IO
                Files, Ports, Network Connections, Transactions


            
============= List Of Sins ...

<!-----CUT-HERE---PASTE-IN-TEXT-FILE---VIEW-WITH-WEB-BROWSER----->

Ken Dickey



Kenneth A Dickey

14565 SW McFarland, Tigard, OR 97224
kend0@earthlink.net
(503) 968-6798



Skills Synopsis

Base Technology Background

  • OSs: Unix {BSD, Linux, Rhapsody/Mach, SunOS, UTek, Ultrix, etc.}, MacOS, Amiga, MSWindows/NT, VRTX, pSOS, V Kernel, VM/CMS, Domain, NOS, RSTS, Xinu, etc.
  • CPU Architectures: 68K, 88K, x86, ARM, PPC.
  • Project Languages: Actor, APL, AppleScript, C, C++, Common Lisp/CLOS, Dylan, Fortran, Java, NewtonScript, Objective C, Pascal, Scheme, ScriptX, SK8Script, Smalltalk80, Smalltalk Agents, T

    Software Architecture/Systems Engineering Experience

  • Tools: Compilers (native and bytecode), debuggers, linkers, loaders, browsers, editors, frameworks, GUIs, integrated development environments, Multimedia title, tool and tool builder technologies
  • Runtime Environments: representations, garbage collection, finalization, exception and object system implementations
  • Formal language theory, including denotational semantics and specification languages; software development process models.
  • Systems Software: real time kernels, virtual memory systems, system resource services, interrupt driven device drivers

    People & Management Skills

  • Led design and implementation of debugger UI presentation software for multi-cpu emulator; Managed a systems group
  • Liaison and design work with groups across divisions and companies on shared development projects, including goal and design negotiations.
  • Typical project management participation (bug board, feature review, budgeting, quality analysis, interviewing and hiring, etc.)
  • Taught classes in multi-paradigm languages and OO
  • Participated in language standards work {IEEE/ANSI Scheme Standard}
  • Formerly on board of directors, LightShip Software {MacScheme application development system}


    Project Experience

    Apple Computer {1992-2000}

  • project: AppleWorks 6.0 productivity suite (WYSIWYG editor, spreadsheet, drawing, paint, presentation)
  • roles: Staff Engineer. Redesigned and implemented AppleScript language support for AppleWorks 6.0 in C++.

  • project: Object Runtimes Group
  • roles: Staff Engineer. Developed Java debugging support for Apple's use of Sun/JavaSoft's Java Virtual Machine (Rhapsody/MacOS X/Win98/NT). Created multiplatform OpenStep windows to display JavaSoft's jdb debugger in various contexts. Wrote combined Java, C, and Objective C code to allow dynamic loading of debug support into the running Java VM. Developed GUI debugging support API for Java using Distributed Objects. Implemented breakpoint based bytecode single-stepping; JVM benchmarking; Investigated use of Mach 3's external memory manager for advanced garbage collection.
  • implementation technology: Multi-language, multi-platform development substrate [OpenStep/Rhapsody: Mach/NT/MacOS].

  • project: AppleScript
  • roles: Staff Engineer. Designed and prototyped AppleScript runtime elements in Java. Did initial implmentation of multi-lingual display support to allow Apple's Java Virtual Machine to display Japanese and other Unicode languages. Investigated various early Java Virtual Machine implementations, both internal and external to Apple.

  • project: Multimedia Authoring Tools
  • roles: Staff Engineer. Engineering analysis and liaison w Kaleida; developed several interface design proposals with and for Kaleida engineers. Took part in joint Apple/IBM project review. Technology investigations and negotiations with other outside companies. Investigation of related platform independent interface technologies (e.g. ILU, SOM, VisualEdge, Oak/Java, Python, Phantom, Obliq, Lingo, etc.). Runtime technology assessment for multimedia authoring, including prototypical implementations (in Scheme, SmallTalk, ScriptX), qualification and benchmarking. Foundation Object Library design and development: added foreign function interface, generic cross code generator, source level debugger, repository services, exception system, and a language specific back end to MM implementation language (SK8Script user language implemented in Common Lisp/CLOS with output to SK8Script, ScriptX, and Java). Design documentation, project planning and schedules. Contractor oversight.
  • implementation technology: Multi-language, multi-platform development substrate {Mac 68K and PPC, MSWindows, Unix}; Languages: C, CLOS/Common Lisp, Java, ScriptX, SK8Script, Smalltalk.

  • project: Investigation of Dylan toolbox on Newton.
  • roles: Designed native OS threads system for Apple Dylan. Implemented prototypes in Scheme and Dylan. Brought Dylan runtime up on custom ARM OS including VM and boot code updates on Newton and other prototype hardware. Did technology assessment (Dylan vs C++). Ported various code to Dylan {e.g. DeltaBlue constraint solver}.
  • implementation technology: ARM 7 w 4 MB EPROM, 1 MB RAM; Languages: Dylan, C++ and ARM assembler.

    MicroTek {1990-1992}

  • project: Multi-cpu ICE (in circuit emulator) (68k, x86, i960)
  • roles: Staff engineer, lead SW architect, and "Mr. GUI". Designed UI and SW component plug 'n play architecture. Led UI implementation and Windows SW group. Set up build procedures and wrote build process tools. Wrote various GUI foundation classes and browsers; wrote memory manager. Taught class in OO technology. Feature review and bug boards, scheduling and schedule/feature negotiation w upper management.
  • implementation technology: WhiteWater's Actor language and C/C++ on Microsoft Windows 3.1 with ethernet to custom HW running VRTX and TCP.

    Tektronix {1984-1990}

  • project: Prism Logic Analyzer
  • roles: System group manager: managed group making OS and runtime enhancements.

  • project: (R&D);Scheme compiler generating native Motorola 88K code
  • roles: Wrote GC, checkout compiler, designed data type encodings and compiler code sequences. Designed and implemented multiple inheritance object system.
  • implementation technology: Macs with custom 88K boards; Scheme language.

  • project: Prism Logic Analyzer
  • roles: Qualified C compiler and real time kernel; brought up pSOS kernel, shell and interrupt driven device drivers on raw hardware with an EPROM burner and a logic analyzer. Updated kernel to run on 68010 rather than 68000. Wrote linker and linking loader, kernel registry services, RPC, system executive, tracking, message and timer services, designed plug 'n play component architecture, file system, etc. Set up build procedures. Liaison w another group using common EPROM and HW for unrelated project.
  • implementation technology: Custom hw with 68010 CPU, 4 MB ram, disk drive, custom personality boards; C language and 68K assembler.

  • project: Prism Logic Analyzer
  • roles: SW Tools: Upgraded development environment from assembly level debugger to source-level, windowed debugger, including design and implementation of source formats so that the output from 2 different C compilers with different binary formats could run mixed in the same system.

  • other roles: Design consulting roles for various projects. Taught class in programming paradigms to practicing SW engineers.

    DiaLogic {1982-1984}

  • project: Interactive sw development environment for IBM mainframes
  • roles: Wrote comm software and some editor personalities; added sw configuration management procedures and fast download via disk cloning.
  • implementation technology: Custom multiprocessor mainframe of m68010 processors running both real and virtual memory; dual ported disk drives; full IBM/SNA i/o channel {max config ~30 processors, .5 GB Disk, 25 MB Ram}. Languages: C, Pascal, T {a Scheme dialect} [sw was about 150 man year effort].

    Purdue University {MS in Computer Science}

    Humboldt State University {BS in Environmental Resources Engineering}

    Other activities

  • IEEE Scheme standards committee, Scheme Authors' Group; Added weak pointers and finalization service to Gambit Scheme compiler. Ported Gambit to the Amiga, Ported VSCM (Scheme Bytecode system) to the Mac, wrote Scheme Compiler in Franz Lisp, designed and implemented 3 object systems.

  • Formerly on board of directors, LightShip Software.

  • Papers and Articles: Getting the Numbers Right [interval methods and numerics in Java: February 1998 Java Report], Scheme for Success [Introduction to the Scheme Language: June 1992 Computer Language], Scheming with Objects [a functional style object system implementation: October 1992 AI Expert], Evaluating Software Language Technologies, Finally! [a discussion of object finalization implementations], Area Notes [a discussion of how to do garbage collection between multiple dynamic and static language runtime systems with minimal synchronization], A Space-Efficient Real-Memory Generational Storage Recycler; Package and Exception article updates for the forthcoming edition of the Encyclopedia of Computer Science.