Knowledge

IBM System Object Model

Source 📝

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:.

Index

System Object Model (file format)

verification
improve this article
adding citations to reliable sources
"IBM System Object Model"
news
newspapers
books
scholar
JSTOR
Learn how and when to remove this message
IBM SOM Logo
Developer(s)
IBM
Stable release
Operating system
OS/2
Windows
AIX
Classic Mac OS
Copland
OS/390
NonStop OS
OS/400
Type
object-oriented
shared library
object-oriented
shared library

Text is available under the Creative Commons Attribution-ShareAlike License. Additional terms may apply.