Misplaced Pages

ProgID

Article snapshot taken from Wikipedia with creative commons attribution-sharealike license. Give it a read and then ask your questions in the chat. We can research this topic together.

ProgID (short for PROGrammatic IDentifier) is a COM term, which is basically a string like "msxml2.domdocument" to represent an underlying CLSID which is something like {F9043C85-F6F2-101A-A3C9-08002B2F49FB}.

#42957

20-403: It is also used to express binary code compatibility between two COM objects. This computing article is a stub . You can help Misplaced Pages by expanding it . Binary code compatibility Binary-code compatibility (binary compatible or object-code compatible) is a property of a computer system , meaning that it can run the same executable code , typically machine code for

40-452: A general-purpose computer central processing unit (CPU), that another computer system can run. Source-code compatibility , on the other hand, means that recompilation or interpretation is necessary before the program can be run on the compatible system. For a compiled program on a general operating system, binary compatibility often implies that not only the CPUs ( instruction sets ) of

60-603: A program in a mix of programming languages, or even compiling a program written in the same language with different compilers. Details covered by an ABI include the following: A complete ABI, such as the Intel Binary Compatibility Standard (iBCS), allows a program from one operating system supporting that ABI to run without modifications on any other such system, provided that necessary shared libraries are present, and similar prerequisites are fulfilled. ABIs can also standardize details such as

80-473: Is a major benefit when developing computer programs that are to be run on multiple OSes. Several Unix -based OSes, such as FreeBSD or NetBSD , offer binary compatibility with more popular OSes, such as Linux -derived ones, since most binary executables are not commonly distributed for such OSes. Most OSes provide binary compatibility, in each version of the OS, for most binaries built to run on earlier versions of

100-516: Is a relatively high-level, hardware-independent, often human-readable format. A common aspect of an ABI is the calling convention , which determines how data is provided as input to, or read as output from, computational routines. Examples of this are the x86 calling conventions . Adhering to an ABI (which may or may not be officially standardized) is usually the job of a compiler , operating system, or library author. However, an application programmer may have to deal with an ABI directly when writing

120-430: Is an interface between two binary program modules. Often, one of these modules is a library or operating system facility, and the other is a program that is being run by a user. An ABI defines how data structures or computational routines are accessed in machine code , which is a low-level, hardware-dependent format. In contrast, an application programming interface (API) defines this access in source code , which

140-585: Is binary compatible with Microsoft's Windows NT family of OSes using Wine for application compatibility and reimplementing the Windows kernel for additional compatibility such as for drivers whereas Linux would use Linux drivers, not Windows drivers. FreeBSD and other members of the BSD family have binary compatibility with the Linux kernel in usermode by translating Linux system calls into BSD ones. This enables

160-506: The C++ name mangling , exception propagation, and calling convention between compilers on the same platform, but do not require cross-platform compatibility. An embedded-application binary interface (EABI) specifies standard conventions for file formats , data types, register usage, stack frame organization, and function parameter passing of an embedded software program, for use with an embedded operating system . Compilers that support

180-524: The PowerPC had the ability to run Mac OS 9 and earlier application software through Classic —but this did not make Mac OS X a binary compatible OS with Mac OS 9. Instead, the Classic environment was actually running Mac OS 9.1 in a virtual machine , running as a normal process inside of Mac OS X. Application binary interface In computer software , an application binary interface ( ABI )

200-583: The Windows API , for example), are sufficiently similar. Hardware (besides the CPU, such as for graphics) and peripherals that an application accesses may also be a factor for full compatibility, although many hardware differences are hidden by modern APIs (often partly supplied by the OS itself and partly by specific device drivers ). In other cases, a general porting of the software must be used to make non-binary-compatible programs work. Binary compatibility

220-769: The EABI create object code that is compatible with code generated by other such compilers, allowing developers to link libraries generated with one compiler with object code generated with another compiler. Developers writing their own assembly language code may also interface with assembly generated by a compliant compiler. EABIs are designed to optimize for performance within the limited resources of an embedded system. Therefore, EABIs omit most abstractions that are made between kernel and user code in complex operating systems. For example, dynamic linking may be avoided to allow smaller executables and faster loading, fixed register usage allows more compact stacks and kernel calls, and running

SECTION 10

#1732797550043

240-515: The OS. For example, many executables compiled for Windows 3.1 , Windows 95 or Windows 2000 can also be run on Windows XP or Windows 7 , and many applications for DOS ran on much newer versions of Windows up to Windows 10 for as long as the NTVDM was supported. For a digital processor implemented in hardware, binary compatibility means that (a large subset of) machine code produced for another processor can be correctly executed and has (much)

260-429: The application and libraries code that run on Linux -based OSes to be run on BSD as well. Note that a binary compatible OS is different from running an alternative OS through virtualization or emulation , which is done to run software within the alternative OS in the case when the host OS is not compatible. Sometimes virtualization is provided with the host OS (or such software can be obtained), which effectively makes

280-499: The application in privileged mode allows direct access to custom hardware operation without the indirection of calling a device driver. The choice of EABI can affect performance. Widely used EABIs include PowerPC , Arm EABI and MIPS EABI. Specific software implementations like the C library may impose additional limitations to form more concrete ABIs; one example is the GNU OABI and EABI for ARM, both of which are subsets of

300-459: The border to a general computer, such as a mobile phone), this may be different. Binary compatible operating systems are OSes that aim to implement binary compatibility with another OS, or another variant of the same brand. This means that they are ABI-compatible (for application binary interface ). As the job of an OS is to run programs, the instruction set architectures running the OSes have to be

320-408: The host OS compatible with programs. For example, Windows XP Mode for Windows 7 allows users to run a 64-bit version of Windows 7 and enable old software to still work in a 32-bit virtual machine running Windows XP ; VMware Workstation / VMware Fusion , Parallels Workstation , and Windows Virtual PC allow other OSes to be run on Windows, Linux, and macOS. For another example, Mac OS X on

340-416: The old, plus additional capabilities or performance. Older executable code will thus run unchanged on the newer product. For a compiled program running directly on a CPU under an OS, a "binary compatible operating system" primarily means application binary interface (ABI) compatibility with another system. However, it also often implies that APIs that the application depends on, directly or indirectly (such as

360-468: The same effect as on the other processor. This is quite common among many processor families, although it is rather uncommon among the ubiquitous small embedded systems built around such processors. Full machine code compatibility would here imply exactly the same layout of interrupt service routines , I/O-ports, hardware registers , counter/timers, external interfaces and so on. For a more complex embedded system using more abstraction layers (sometimes on

380-468: The same or compatible. Otherwise, programs can be employed within a CPU emulator or a faster dynamic translation mechanism to make them compatible. For example, the Linux kernel is not compatible with Windows. This does not mean that Linux cannot be binary compatible with Windows applications. Additional software, Wine , is available that does that to some degree. The ReactOS development effort seeks to create an open-source , free software OS that

400-449: The two computers are binary compatible, but also that interfaces and behaviours of the operating system (OS) and application programming interfaces (APIs), and the application binary interfaces (ABIs) corresponding to those APIs, are sufficiently equal, i.e. "compatible". A term like backward-compatible usually implies object-code compatibility. This means that newer computer hardware and/or software has (practically) every feature of

#42957