somFree Getting Started

somFree Programming Guide

somFree Compiler and Emitter Framework

Quick history

IBM SOM 1.0 - came out with OS/2 2.0 and used to build WorkPlaceShell. It includes only SOMObject, SOMClass and SOMClsMgr classes. Object Interface Definition Language was used to describe interfaces.

IBM SOM 2.0 - aligned with CORBA 1.1, used CORBA IDL and added DSOM. SOM Compiler was reworked and Emitter Framework was added. C++ bindings that allow you to implement and invoke your classes in C++. The Distributed, Persistence, Replication and Emitter Frameworks. CORBA compliance, SOM classes are now described in CORBA's Interface Definition Language (IDL) instead of OIDL. Support for multiple inheritance. Interface Repository for run-time typing information.

IBM SOM 2.1 - Persistence and Replication Frameworks removed. DirectToSOM (DTS) C++ support added. 32-bit TCP/IP support. New initialization. DSOM changes to support CORBA memory management. Metaclasses Framework.

SOM adopted by Apple to move OpenDoc from C++ to a language neutral framework.

IBM SOM 3.0 - added IIOP support, referencing counting for SOMObject and more CORBA frameworks and object services

somFree 1.x - Roger Brown reimplementation of IBM SOM, but some parts missing and some reverted (like Persistence framework). Initial stubs for CORBA 2+ support.

osFree somFree - enhanced version of somFree which attempts to return SOM Compiler and Emitter Framework design to somFree. And add CORBA 2+ support.

SOM was available on OS/2 2.0 upwards, Windows NT, AIX 4, OS/390 and OS/400.

Why somFree?

somFree project provides a clean-room implementation of the major SOM components and is built to be very portable. The name comes from the method used to delete a SOMObject.

Main differences from IBM SOM

IDL compiler is a C++ program rather than a SOM based framework. This solves a chicken-and-egg problem.

Assembler is not used for thunking, somResolve() uses macros and apply/dispatch stubs.

Some components are just hollow stubs, such as SOMP.

Some components are not fully functional, eg somossvr.

You can have both C and C++ header files generated. The choice of 'somcorba' or 'somstars' comes from managing the 'SOMSTAR' macro.

No security functions implemented.

Changes

Changes to osFree version from original somFree compiler:

Added and mostly documented SOM Compiler library - SOMC. Most of the internal structures now also present as in old IBM SOM 2.1 Toolkit. SOMLINK style functions for most of SOM Compiler library added (NT version used optlink for some functions). somtShowEntry function outputs more info. Undocumented SOMTTypes now documented.

SOM Compiler now supports emitters too.

New emitters:

LNK - Open Watcom WLink support.

DUMP - displays structures, available to emitter.

PAS - Pascal client support.

IPAS - Pascal implementation classes support.

Emitters now IBM SOM 2.1 and IBM SOM 3.0 compatible without recompilation.

somFree Compiler supports IBM SOM 2.1, IBM SOM 3.0, and somFree 1.0 emitters.

SOMIPC now supports IDL 4.2 specification.

CORBA C Language Mapping Specification 1.0 now supported by default instead of CORBA 1.1 C Language mapping.

Added support of OIDL files

PDL improvements to be close to original PDL

Core IDLs revised and some documenting was added