136:
1378:
32:
380:
1388:
1156:
489:. VisualAge C++ 4.0 introduced .icc projects and removed icc.exe and ilink.exe command line compiler and linker from supply. It is impossible to build any SOM DTK sample out of box with VAC++ 4.0. VisualAge C++ comes with its own samples, but there are no .icc SOM samples even in VAC++ 4.0 for OS/2. vacbld.exe, the only command line compilation tool, doesn't support SOM.
365:
SOMobjects were not completely shut down by IBM. They were ported to OS/390, and are still available on this OS. One can read documentation on IBM website. In 1996 Tandem
Computers Inc. obtained SOMobjects technology. Tandem was sold to Compaq, Compaq was sold to Hewlett-Packard. NonStop DOM and some
762:
A notable difference is support for inheritance. COM does not. Although may think it odd that
Microsoft produced an object library technology that could not support such a fundamental concept of OO programming; the main reason is that it is difficult to know where a base class exists in memory where
565:
As of 2015, most of the information in the linked table is applicable to modern versions, except
Objective-C 2.0 getting so called non-fragile instance variables. Some solutions remained experimental: SGI Delta/C++ or Sun OBI. Most approaches based on one programming language were phased out or were
496:
Near the end of the 1990s, IBM shut down SOMobjects download sites and never put them back online. SOM 3.0 DTK for WinNT can't be found on IBM FTP, despite much other legacy stuff lying around freely. Despite general availability of SOM 3.0 for WinNT, it was nearly impossible to locate until the end
766:
SOM instead uses an algorithm, looking for potential base classes by following the inheritance tree and stopping at the first one that matches. This is the idea behind inheritance in most cases. The downside to this approach is that it is possible that new versions of this base class may no longer
634:
is the most promising competitor to SOM (although not being actively marketed as multi-language platform), and SOM should preferably be compared to
Objective-C as opposed to COM as it happened historically. With non-fragile instance variables in Objective-C 2.0 it is the best alternative amongst
706:
and therefore compatible with the binary layout of the virtual table of C++ objects (at least in
Microsoft's C++ compiler). With a compatible C++ compiler, a custom interface can be defined as a pure virtual C++ class. The interface can be called by any language that can call C functions via a
779:
for
Windows. This technology provided different means to integrate between COM and SOM components. In particular, SOM objects can be made available to OLE2 applications by either late binding bridge (based on IDispatch) or COM interfaces having higher performance. In essence, SOM classes are
280:
A SOM library can be updated without requiring client code to be rebuilt. If a library is changed to add new classes or methods, or to change the internal implementation of classes or methods, a consuming program can still use it without being rebuilt. In this way, SOM addresses the
677:
Another restriction is that no generic public classes or interfaces can be exposed. Polymorphism isn't available to WinRT types, and the closest you can come is implementing WinRT interfaces; you must declare as sealed any classes that are publicly exposed by your
Windows Runtime
657:
under closer look behaves much like COM. Its metadata description is based on .NET, but since WinRT does not contain special runtime to resolve RRBC issues, like in
Objective-C or SOM, several restrictions had to be applied that limit WinRT on procedural level:
771:
remains the same. This possibility exists in any program, not only those using a shared library, but a problem can become difficult to resolve if it exists in someone else's code. In SOM, the only solution is testing of new versions of libraries.
726:
SOM is more robust in terms of supporting object-oriented (OO) features. Whereas COM essentially defines a cut-down version of C++ to program to, SOM supports almost all common features. It also supports some less common features such as
763:
libraries are loaded in a order unknown at design time. COM demands that the programmer specify the exact base class at compile time, making it impossible to insert other derived classes in the middle; at least in other COM libraries.
492:
VisualAge C++ bundled-in Object
Component Library (OCL) was not based on SOM. It was probably meant to be ported to SOM using C++ Direct-to-SOM mode, but in VAC v3.6.5 this mode was abandoned, and OCL has no SOM interface so
718:
problem. To prevent the problem, a rule for COM development is that once published, a custom interface cannot be changed. To add or change the exposed features of an object, it can implement additional custom interfaces.
481:
The first version of VisualAge C++ for
Windows was 3.5. It was the first and the last version to support SOM. It had SOM 2.1 bundled in and Direct-to-SOM support in the compiler. Versions 3.6.5 and later had no trace of
722:
SOM avoid this issue by providing only late binding – allowing the run-time linker to re-build the table on the fly. This way, changes to the underlying libraries are resolved when they are loaded into programs.
473:
development. SOM 3.0 for WinNT was generally available in December 1996. The reasons for not advancing in these directions go beyond market adoption problems. They involve opportunities missed by
300:
and used in another. A client can create and use objects from the exposed classes and derive subclasses from the exposed classes even if the client language does not support class typing.
841:
671:
513:
Two projects of open-source SOM implementations exist. One is Netlabs Object Model (NOM), which is technically the same, but binary incompatible. Another is somFree, which is a
366:
other technologies eventually merged into NonStop CORBA, but current documentation of NonStop products does not contain signs of SOM technology still powering NonStop products.
739:, which had led most SOM/COM-like systems to be simpler at the cost of supporting fewer languages. Multi-language support was important to IBM as they wanted to support both
462:(to become Mac OS X later). SOM/DSOM development faded, and is no longer actively developed, although it continues to be included and used in OS/2-based systems such as
964:
702:, a.k.a. custom interface, that is less safe although more performant. It allows a client to access an object via a function table that is compatible with
327:) computers, allowing programs designed for the desktop to use a mainframe for processing and data storage. IBM produced versions of SOM/DSOM for OS/2,
442:
for SOM/DSOM largely disappeared; if users would not be running OS/2 on the desktop, there would be no universal object library anyway. In 1997, when
823:
845:
586:
is also not known much in this role and not known to be marketed this way, but its runtime is one of the most friendly to similar use cases.
791:
avoided these issues via a strong versioning system, allowing library authors to ship new versions along with the old, thereby guaranteeing
775:
While SOM and COM were contrapositioned by IBM, they were not mutually exclusive. In 1995 Novell contributed ComponentGlue technology to
714:. In particular, if a version of the object is published with a modified custom interface, a client may crash. This is an example of the
597:). Qt and KDE are notable for describing efforts it takes to maintain binary compatibility without special support in development tools.
96:
68:
49:
622:
911:
897:
75:
354:
Perhaps the most widespread uses of SOM within IBM were in later versions of OS/2, which used it for most code, including the
311:. Each object exposes methods that provide the class name and whether the object implements a particular method, for example.
1422:
1321:
645:
are being used actively, but they only manage interfaces, not implementations, and thus are not on the same level as SOM,
82:
694:
Some consider SOM to be more robust since it only supports a language-neutral calling mechanism that is similar to COM
1241:
950:
768:
574:(JVM) was later excluded from the chain. It can be seen as Java replaced with Cross Platform Component Object Model (
423:
304:
115:
20:
405:
64:
282:
215:
1358:
1417:
1033:
928:
784:
390:
53:
607:
961:
1289:
788:
980:
827:
559:
241:
220:
159:
1261:
611:
447:
196:
566:
never used actively in the same way. For instance, Netscape Plugin Application Programming Interface (
579:
536:
256:
89:
667:
A ref class that has a public constructor must be declared as sealed, to prevent further derivation.
1427:
293:
1246:
438:
401:
397:
42:
998:
960:
An article with identical name and similar contents of the same author can be found on the Web:
603:
only aimed to avoid dependence on C++ compiler, but RRBC issues are the same as in generic C++.
1284:
866:
792:
688:
638:
661:
1412:
1391:
1294:
270:
252:
1256:
756:
728:
571:
469:
Despite effective death of OS/2 and OpenDoc, SOM could have yet another niche: Windows and
336:
297:
606:
Without special runtime many other programming languages will have the same issues, e.g.,
8:
1101:
1026:
744:
715:
711:
619:
320:
1301:
1210:
946:
915:
514:
328:
184:
810:
691:(COM). Both support a library format that can be used from more than one language.
885:
748:
736:
175:
582:(CLOS) and Smalltalk are not known as being chain links like Java in LiveConnect.
1266:
1136:
968:
703:
654:
626:
355:
1306:
1251:
1141:
1091:
842:"Tandem Leverages IBM's SOMobjects Technology for Distributed Object Computing"
470:
344:
260:
244:
223:
192:
135:
1406:
1381:
1311:
1225:
1131:
1121:
1019:
699:
590:
1215:
1096:
1085:
695:
570:) browser plugins were written using Java API initially (LiveConnect), but
340:
1337:
1220:
1205:
1126:
1111:
1106:
650:
631:
583:
554:
501:
455:
359:
1116:
672:
Windows Runtime Components - Windows Runtime Components in a .NET World
443:
204:
143:
710:
A risk of a custom interface is that an incompatibility can result in
618:
it took to produce Delphi 2006 binary compatible Delphi 2007 release:
1363:
1185:
1063:
999:"Novell To Ship New OpenDoc(TM) Developer Release | Micro Focus"
740:
732:
531:
362:
for OS/2 is able to deal with SOM classes and objects including WPS.
981:"Policies/Binary Compatibility Issues With C++ - KDE Community Wiki"
620:
How to add a "published" property without breaking DCU compatibility
408:. Statements consisting only of original research should be removed.
31:
1200:
1195:
1190:
1180:
1175:
1170:
486:
459:
308:
776:
646:
600:
451:
348:
940:
1342:
463:
446:
returned to Apple and ended many development efforts including
208:
200:
958:
Chapter 11 "Release-to-Release Binary Compatibility", page 246
752:
642:
575:
567:
543:
286:
274:
1042:
332:
324:
180:
1155:
1069:
909:
594:
520:
474:
277:, allowed objects on different computers to communicate.
248:
188:
148:
1011:
351:
framework, but saw limited use in other roles as well.
347:
for similar purposes. It was most widely used in their
56:. Unsourced material may be challenged and removed.
319:SOM was intended to be used universally in IBM's
1404:
500:Finally, IBM never open-sourced SOM (as done to
436:With the "death" of OS/2 in the mid-1990s, the
910:Steven J. Vaughan-Nichols (February 8, 2008).
508:
285:that affects other library technology such as
1027:
898:Just a little SOM thing for Linux developers
339:). For some time after the formation of the
912:"Reviving OS/2's best in the Linux desktop"
259:so that its interface is separate from its
1154:
1034:
1020:
504:), despite several articles and petitions.
134:
941:Ira R. Forman and Scott Danforth (1999).
527:SOM can be compared compiled libraries:
424:Learn how and when to remove this message
116:Learn how and when to remove this message
477:, and destructive incompatible changes:
962:Release-to-Release Binary Compatibility
1405:
780:implementing COM interfaces this way.
521:Comparison to compiled class libraries
307:(API) that provides access to library
1015:
824:"SOMobjects for OS/390 documentation"
614:. It can be illustrated by so-called
1387:
813:by Dr. Willis Boughton (August 2004)
682:
517:of IBM SOM, and binary compatible.
373:
54:adding citations to reliable sources
25:
900:by Esther Schindler (February 2008)
589:Generic C++ is still being used in
13:
14:
1439:
1242:Information Presentation Facility
787:, also support full inheritance.
305:application programming interface
21:System Object Model (file format)
1386:
1377:
1376:
1322:Systems Application Architecture
867:"List of ArcaOS 5.0 WPS Classes"
378:
283:fragile binary interface problem
30:
991:
973:
888:by Roger Sessions (August 1996)
593:and the K Desktop Environment (
314:
41:needs additional citations for
1216:Warp Connect (PowerPC Edition)
934:
922:
903:
891:
879:
859:
834:
816:
804:
785:Distributed Objects Everywhere
783:Similar technologies, such as
369:
1:
798:
485:SOMobjects largely relied on
1290:High Performance File System
789:Portable Distributed Objects
343:, SOM/DSOM was also used by
7:
1423:Object-oriented programming
943:Putting Metaclasses to Work
795:at the cost of disk space.
551:Sun Object Binary Interface
509:Alternative implementations
404:the claims made and adding
335:flavors (notably IBM's own
10:
1444:
1262:Windows Libraries for OS/2
931:, second round (2007–2010)
251:that supports defining an
18:
1372:
1351:
1330:
1275:
1234:
1163:
1152:
1078:
1056:
1049:
687:SOM is often compared to
580:Common Lisp Object System
537:Common Lisp Object System
214:
174:
170:
158:
154:
142:
133:
65:"IBM System Object Model"
1041:
458:already being in use in
454:, SOM was replaced with
247:technology developed by
19:Not to be confused with
1247:Installable File System
793:backward compatibility
689:component object model
616:unprecedented approach
165:3.0 / December 1996
1418:Object request broker
1302:Journaled File System
759:and fixed dispatch).
296:to be defined in one
16:Programming framework
1257:Presentation Manager
757:multiple inheritance
729:multiple inheritance
698:. COM also supports
662:Type System (C++/CX)
635:actively supported.
572:Java Virtual Machine
298:programming language
50:improve this article
1317:System Object Model
830:on January 6, 2014.
811:SOM and Object REXX
737:dynamic dispatching
234:System Object Model
130:
1285:Common User Access
1102:Christine Comaford
967:2015-10-03 at the
945:. Addison-Wesley.
886:Lost in the Garden
745:single inheritance
716:fragile base class
712:undefined behavior
625:2015-12-08 at the
389:possibly contains
128:
1400:
1399:
1359:Odin (Win32-OS/2)
1150:
1149:
1088:(chief architect)
1066:(1.0 to 1.3 only)
985:community.kde.org
929:The OS/2 petition
767:work even if the
683:Comparison to COM
515:clean room design
434:
433:
426:
391:original research
329:Microsoft Windows
273:variant based on
230:
229:
126:
125:
118:
100:
1435:
1390:
1389:
1380:
1379:
1158:
1054:
1053:
1036:
1029:
1022:
1013:
1012:
1007:
1006:
995:
989:
988:
977:
971:
956:
938:
932:
926:
920:
919:
914:. Archived from
907:
901:
895:
889:
883:
877:
876:
874:
873:
863:
857:
856:
854:
853:
844:. Archived from
838:
832:
831:
826:. Archived from
820:
814:
808:
749:dynamic dispatch
429:
422:
418:
415:
409:
406:inline citations
382:
381:
374:
303:SOM provides an
176:Operating system
138:
131:
127:
121:
114:
110:
107:
101:
99:
58:
34:
26:
1443:
1442:
1438:
1437:
1436:
1434:
1433:
1432:
1428:OS/2 technology
1403:
1402:
1401:
1396:
1368:
1347:
1326:
1277:
1271:
1267:Workplace Shell
1230:
1159:
1146:
1137:John R. Patrick
1074:
1045:
1040:
1010:
997:
996:
992:
979:
978:
974:
969:Wayback Machine
959:
957:
953:
939:
935:
927:
923:
908:
904:
896:
892:
884:
880:
871:
869:
865:
864:
860:
851:
849:
840:
839:
835:
822:
821:
817:
809:
805:
801:
685:
655:Windows Runtime
627:Wayback Machine
523:
511:
430:
419:
413:
410:
395:
383:
379:
372:
356:Workplace Shell
317:
242:object-oriented
221:object-oriented
166:
122:
111:
105:
102:
59:
57:
47:
35:
24:
17:
12:
11:
5:
1441:
1431:
1430:
1425:
1420:
1415:
1398:
1397:
1395:
1394:
1384:
1373:
1370:
1369:
1367:
1366:
1361:
1355:
1353:
1349:
1348:
1346:
1345:
1340:
1334:
1332:
1328:
1327:
1325:
1324:
1319:
1314:
1309:
1307:New Executable
1304:
1299:
1298:
1297:
1287:
1281:
1279:
1273:
1272:
1270:
1269:
1264:
1259:
1254:
1249:
1244:
1238:
1236:
1232:
1231:
1229:
1228:
1223:
1218:
1213:
1208:
1203:
1198:
1193:
1188:
1183:
1178:
1173:
1167:
1165:
1164:Major versions
1161:
1160:
1153:
1151:
1148:
1147:
1145:
1144:
1142:Mark Zbikowski
1139:
1134:
1129:
1124:
1119:
1114:
1109:
1104:
1099:
1094:
1092:Barry Appelman
1089:
1082:
1080:
1076:
1075:
1073:
1072:
1067:
1060:
1058:
1051:
1047:
1046:
1039:
1038:
1031:
1024:
1016:
1009:
1008:
1003:www.novell.com
990:
972:
951:
933:
921:
918:on 2010-04-17.
902:
890:
878:
858:
833:
815:
802:
800:
797:
684:
681:
680:
679:
669:
668:
563:
562:
557:
552:
549:
546:
540:
534:
522:
519:
510:
507:
506:
505:
498:
494:
490:
483:
471:cross-platform
432:
431:
386:
384:
377:
371:
368:
345:Apple Computer
316:
313:
261:implementation
245:shared library
228:
227:
224:shared library
218:
212:
211:
193:Classic Mac OS
178:
172:
171:
168:
167:
164:
162:
160:Stable release
156:
155:
152:
151:
146:
140:
139:
129:IBM SOMobjects
124:
123:
38:
36:
29:
15:
9:
6:
4:
3:
2:
1440:
1429:
1426:
1424:
1421:
1419:
1416:
1414:
1411:
1410:
1408:
1393:
1385:
1383:
1375:
1374:
1371:
1365:
1362:
1360:
1357:
1356:
1354:
1350:
1344:
1341:
1339:
1336:
1335:
1333:
1329:
1323:
1320:
1318:
1315:
1313:
1310:
1308:
1305:
1303:
1300:
1296:
1293:
1292:
1291:
1288:
1286:
1283:
1282:
1280:
1274:
1268:
1265:
1263:
1260:
1258:
1255:
1253:
1250:
1248:
1245:
1243:
1240:
1239:
1237:
1233:
1227:
1224:
1222:
1219:
1217:
1214:
1212:
1209:
1207:
1204:
1202:
1199:
1197:
1194:
1192:
1189:
1187:
1184:
1182:
1179:
1177:
1174:
1172:
1169:
1168:
1166:
1162:
1157:
1143:
1140:
1138:
1135:
1133:
1132:Gordon Letwin
1130:
1128:
1125:
1123:
1122:Galina Kofman
1120:
1118:
1115:
1113:
1110:
1108:
1105:
1103:
1100:
1098:
1095:
1093:
1090:
1087:
1084:
1083:
1081:
1077:
1071:
1068:
1065:
1062:
1061:
1059:
1055:
1052:
1048:
1044:
1037:
1032:
1030:
1025:
1023:
1018:
1017:
1014:
1004:
1000:
994:
986:
982:
976:
970:
966:
963:
954:
952:0-201-43305-2
948:
944:
937:
930:
925:
917:
913:
906:
899:
894:
887:
882:
868:
862:
848:on 2016-03-05
847:
843:
837:
829:
825:
819:
812:
807:
803:
796:
794:
790:
786:
781:
778:
773:
770:
764:
760:
758:
754:
750:
746:
742:
738:
734:
730:
724:
720:
717:
713:
708:
705:
701:
700:early binding
697:
692:
690:
676:
675:
674:
673:
666:
665:
664:
663:
659:
656:
652:
648:
644:
640:
636:
633:
629:
628:
624:
621:
617:
613:
609:
604:
602:
598:
596:
592:
587:
585:
581:
577:
573:
569:
561:
558:
556:
553:
550:
548:SGI Delta/C++
547:
545:
541:
538:
535:
533:
530:
529:
528:
525:
518:
516:
503:
499:
495:
491:
488:
484:
480:
479:
478:
476:
472:
467:
465:
461:
457:
453:
449:
445:
441:
440:
439:raison d'être
428:
425:
417:
407:
403:
399:
393:
392:
387:This section
385:
376:
375:
367:
363:
361:
357:
352:
350:
346:
342:
338:
334:
330:
326:
323:and desktop (
322:
312:
310:
306:
301:
299:
295:
290:
288:
284:
278:
276:
272:
268:
264:
262:
258:
254:
250:
246:
243:
239:
235:
225:
222:
219:
217:
213:
210:
206:
202:
198:
194:
190:
186:
182:
179:
177:
173:
169:
163:
161:
157:
153:
150:
147:
145:
141:
137:
132:
120:
117:
109:
98:
95:
91:
88:
84:
81:
77:
74:
70:
67: –
66:
62:
61:Find sources:
55:
51:
45:
44:
39:This article
37:
33:
28:
27:
22:
1413:IBM software
1316:
1278:and concepts
1211:Warp Connect
1097:Joe Belfiore
1086:Ed Iacobucci
1002:
993:
984:
975:
942:
936:
924:
916:the original
905:
893:
881:
870:. Retrieved
861:
850:. Retrieved
846:the original
836:
828:the original
818:
806:
782:
774:
765:
761:
725:
721:
709:
696:late binding
693:
686:
670:
660:
637:
630:
615:
605:
599:
588:
564:
526:
524:
512:
468:
437:
435:
420:
411:
388:
364:
353:
341:AIM alliance
331:and various
318:
315:Applications
302:
291:
279:
266:
265:
237:
233:
231:
144:Developer(s)
112:
103:
93:
86:
79:
72:
60:
48:Please help
43:verification
40:
1338:eComStation
1127:Barry Leiba
1112:Naveen Jain
1107:Moshe Dunie
733:metaclasses
651:Objective-C
632:Objective-C
584:Objective-C
555:Objective-C
502:Object REXX
456:Objective-C
370:Fading away
360:Object REXX
292:SOM allows
271:distributed
1407:Categories
1331:Successors
1276:Technology
1252:LAN Server
1235:Components
1117:Susan Kare
1050:Developers
872:2020-09-03
852:2015-05-02
799:References
707:pointer.
678:Component.
444:Steve Jobs
398:improve it
205:NonStop OS
106:March 2013
76:newspapers
1364:Team OS/2
1064:Microsoft
1057:Companies
741:Smalltalk
532:Smalltalk
487:makefiles
414:July 2013
402:verifying
321:mainframe
253:interface
1382:Category
1352:See also
1226:Warp 4.5
1221:Warp 4.0
1206:Warp 3.0
965:Archived
623:Archived
542:generic
497:of 2012.
460:OPENSTEP
309:metadata
240:) is an
1392:Commons
1295:Pinball
777:OpenDoc
751:) with
647:GObject
601:GObject
452:OpenDoc
448:Copland
396:Please
349:OpenDoc
294:classes
197:Copland
185:Windows
90:scholar
1343:ArcaOS
1312:Shadow
1079:People
949:
608:Delphi
539:(CLOS)
464:ArcaOS
257:object
255:to an
226:system
209:OS/400
201:OS/390
92:
85:
78:
71:
63:
643:XPCOM
576:XPCOM
568:NPAPI
275:CORBA
97:JSTOR
83:books
1186:1.21
1043:OS/2
947:ISBN
747:and
735:and
649:and
560:Java
493:far.
482:SOM.
450:and
333:Unix
325:OS/2
269:, a
267:DSOM
232:The
216:Type
181:OS/2
69:news
1201:2.1
1196:2.0
1191:1.3
1181:1.2
1176:1.1
1171:1.0
1070:IBM
769:API
753:C++
639:COM
612:Ada
595:KDE
578:).
544:C++
475:IBM
400:by
337:AIX
287:C++
263:.
249:IBM
238:SOM
189:AIX
149:IBM
52:by
1409::
1001:.
983:.
731:,
653:.
641:,
610:,
591:Qt
466:.
358:.
289:.
207:,
203:,
199:,
195:,
191:,
187:,
183:,
1035:e
1028:t
1021:v
1005:.
987:.
955:.
875:.
855:.
755:(
743:(
704:C
427:)
421:(
416:)
412:(
394:.
236:(
119:)
113:(
108:)
104:(
94:·
87:·
80:·
73:·
46:.
23:.
Text is available under the Creative Commons Attribution-ShareAlike License. Additional terms may apply.