Binary (in)Compatibility PDF Print E-mail
User Rating: / 3
PoorBest 
Written by Michael Felt   

There is a new POWER chip - and consequently there is a lot of discussion about binary (in)compatibility. What causes of binary incompatibility and how might be avoided? A short explanation of this is covered here.

With new hardware, operating systems etc. there is a frequent concern about application portability. We all have some experience with this phenomenon. Unsure? How about the last time you updated the operating system on a PC, or bought a new PC and reinstalled your old programs?

Introduction

With modern operating systems binary incompatibility is most often caused by application design or programming development decisions and much less often caused by operating system changes. A classic example of when binary incompatibilty was a major complaint of long-term customers was when Digital came out with the Alpha processor. A fantastic processor, far ahead of others at the time - but all the old programs - often applications AND data needed to be updated. In other words, all applications needed to be recompiled, or purchased again and data often needed to be converted from one layout to another. Conversion can be a major headache.

Recently many organizations are switching to Linux - as a more generic, hardware independent platform. Often there is a binary incompatibility requiring a conversion process. Many organizations are moving not only from one operating system to Linux, but also from an "old" hardware platform to an Intel™ or POWER™ processor. These experiences, or concerns  of conversion headaches, cause many organizations to delay a move to something new for a long time. Are the concerns warrented? Maybe. Much depends on the organization making the change as well as the track record of the new operating system (update) and/or hardware supplier or vendor.

AIX, Solaris, HPUX, Linux, etc. are all doing there best to ensure that programs that run well on a current version of the operating system will continue to operate well on a newer version. Often, the reverse (new to old version of operating system) is generally not supported - it is hard to run unmodified when dependent on features that were preent in a previous version. Note: HPUX, Solaris, AIX, True64, etc. are not Linux. Some conversion is to be expected when moving from anything to Linux simply because the features and system calls are different.

What is the most likely cause of binary incompatibility for a program compiled or ported to AIX?

For 32-bit programs AIX is binary compatible from "way back when" (AIX 3.2.5) to now (AIX 5.3) when certain conventions are followed. IBM has a reference page on AIX binary compatibility and application portability. However, this is not true for all programs. The most likely cause of binary compatibility is using static libraries (storing the library instruction code in the application with the program) rather than shared libraries.

If stored (i.e. not shared) libraries are the most likely cause of binary incompatiblity - why don't all programs use shared libraries?

The most obvious advantage of having non-shared, or linked libraries (to use yet another name for a stored or static library) is that you dont have to have the library already installed to use the program. The program might even load faster. And many feel it makes you less susecptible to changes in the underlying operating systems. Another reason some developers prefer using static libraries is because of a specific modification they want to make. And lastly, many developers consider it much easier to support a package using static libraries because they control all the code.

Why might a program using a shared library not be compatible?

A shared library often functions as an API - or Application Programming Interface. As long as changes in a library are only internal to the library and/or the way the library communicates with other underlying layers the applicaiton continues to run unmodified. In other words, as long as there is no change that requires a modification in the way(s) an application built on an API uses the API then the modifications are "transparent".

If AIX has such a long track record of binary compatibility why are though so many packages in the AIX Toolbox, or other open source packages, pre-compiled for AIX 4.3.3, AIX 5.1, AIX 5.2 and/or AIX 5.3?

This impossible to answer with simple "because". There are too many possible factors to be absolutely certain, but I can make a best guess! Between AIX 4.3.3 and AIX 5.1 there was Project Monteray. During that time period there was a so-called "Early Adopter" version of AIX (AIX 5.0 was the official name - is case you ever wondered why AIX seems to have gone from version 4.3.3 to AIX 5.1). One of the apparent changes to AIX to support Linux applications occured in the C runtime libraries. There are small, but significant differences in the Linux and AIX (or UNIX) runtime environments expected by an application. And other, again small but significant changes, are important in runtime environment environments for AIX 5.2 and AIX 5.3. In my experience with porting - I have been able to trace all these changes back to new features in a gcc compiler. New features need new libraries. And, so the next question....

I see a version for AIX 4.3.3, AIX 5.1 and AIX 5.2, but not for AIX 5.3. When will the version for AIX 5.3 be available?

Right now. Use the version closest to the version you are using. If that is AIX 5.3, then the closest version is AIX 5.2. If you see a package without any version number it probably runs on all of them. But again, no guarantees. Maybe the developer decided that AIX 4.3.3 no lonber "exists", and made a single package for AIX 5.X. Try it. If it doesnt work, try to locate the project site and/or make a post on the forums under Applications. If I have time I will take a look at it. I have systems running AIX 4.3.3, 5.1, 5.2 and 5.3.
 
< Prev   Next >
60 queries executed
1
SET sql_mode = 'MYSQL40'
2 SELECT folder, element, published, params FROM jos_mambots WHERE published >= 1 AND access <= 0 AND folder = 'system' ORDER BY ordering
3 SELECT template FROM jos_templates_menu WHERE client_id = 0 AND ( menuid = 0 OR menuid = 99999999 ) ORDER BY menuid DESC LIMIT 1
4 DELETE FROM jos_session WHERE ( ( time < '1548004688' ) AND guest = 0 AND gid > 0 ) OR ( ( time < '1548004688' ) AND guest = 1 AND userid = 0 )
5 SELECT COUNT(*) FROM jos_stats_agents WHERE agent = 'Unknown' AND type = 0
6 UPDATE jos_stats_agents SET hits = ( hits + 1 ) WHERE agent = 'Unknown' AND type = 0
7 SELECT COUNT(*) FROM jos_stats_agents WHERE agent = 'Unknown' AND type = 1
8 UPDATE jos_stats_agents SET hits = ( hits + 1 ) WHERE agent = 'Unknown' AND type = 1
9 SELECT COUNT(*) FROM jos_stats_agents WHERE agent = 'com' AND type = 2
10 UPDATE jos_stats_agents SET hits = ( hits + 1 ) WHERE agent = 'com' AND type = 2
11 SELECT * FROM jos_menu WHERE published = 1 AND link LIKE 'index.php?option=content&task=view%'
12 SELECT a.*, u.name AS author, u.usertype, cc.name AS category, s.name AS section, g.name AS groups, s.published AS sec_pub, cc.published AS cat_pub, s.access AS sec_access, cc.access AS cat_access, s.id AS sec_id, cc.id as cat_id FROM jos_content AS a LEFT JOIN jos_categories AS cc ON cc.id = a.catid LEFT JOIN jos_sections AS s ON s.id = cc.section AND s.scope = 'content' LEFT JOIN jos_users AS u ON u.id = a.created_by LEFT JOIN jos_groups AS g ON a.access = g.id WHERE a.id = 113 AND ( a.state = 1 OR a.state = -1 ) AND ( a.publish_up = '0000-00-00 00:00:00' OR a.publish_up <= '2019-01-20 18:33' ) AND ( a.publish_down = '0000-00-00 00:00:00' OR a.publish_down >= '2019-01-20 18:33' ) AND a.access <= 0
13 SELECT a.id FROM jos_content AS a WHERE a.catid = 47 AND a.state = -1 AND a.access <= 0 AND ( a.state = 1 OR a.state = -1 ) AND ( a.publish_up = '0000-00-00 00:00:00' OR a.publish_up <= '2019-01-20 18:33' ) AND ( a.publish_down = '0000-00-00 00:00:00' OR a.publish_down >= '2019-01-20 18:33' ) ORDER BY a.ordering
14 SELECT ROUND( v.rating_sum / v.rating_count ) AS rating, v.rating_count FROM jos_content AS a LEFT JOIN jos_content_rating AS v ON a.id = v.content_id WHERE a.id = 113
15 UPDATE jos_content SET hits = ( hits + 1 ) WHERE id = '113'
16 SELECT hits FROM jos_core_log_items WHERE time_stamp = '2019-01-20' AND item_table = '#__content' AND item_id = '113'
17 INSERT INTO jos_core_log_items VALUES ( '2019-01-20', '#__content', '113', 1 )
18 SELECT folder, element, published, params FROM jos_mambots WHERE access <= 0 AND folder = 'content' ORDER BY ordering
19 SELECT value FROM jos_bookmarks_prefs WHERE userid = '-1' AND category = 'params' AND name = 'urlkey'
20 SELECT value FROM jos_bookmarks_prefs WHERE userid = '-1' AND category = 'params' AND name = 'snapshotactiv'
21 SELECT value FROM jos_bookmarks_prefs WHERE userid = '-1' AND category = 'params' AND name = 'snapshotother'
22 SELECT id FROM jos_mambots WHERE element = 'mosbookmarks' AND folder = 'content'
23 SELECT * FROM jos_mambots WHERE id = '32'
24 SELECT name, value FROM jos_bookmarks_prefs WHERE userid = '-1' AND category = 'params' ORDER BY name
25 SELECT c.id, c.parent FROM jos_bookmarks_categories as c WHERE c.id = -1
26 SELECT * FROM jos_bookmarks_columns WHERE category='' AND custom='0'
27 SELECT * FROM jos_bookmarks_columns WHERE category='' ORDER BY ordering
28 SELECT * FROM jos_bookmarks_columns WHERE category='admin'
29 SELECT * FROM jos_bookmarks_columns WHERE category='admin' ORDER BY ordering
30 SELECT id FROM jos_mambots WHERE element = 'plugin_jw_allvideos' AND folder = 'content'
31 SELECT * FROM jos_mambots WHERE id = '27'
32 SELECT id FROM jos_mambots WHERE element = 'plugin_jw_allvideos' AND folder = 'content'
33 SELECT * FROM jos_mambots WHERE id = '27'
34 SELECT id FROM jos_mambots WHERE element = 'plugin_jw_allvideos' AND folder = 'content'
35 SELECT * FROM jos_mambots WHERE id = '27'
36 SELECT id FROM jos_mambots WHERE element = 'plugin_jw_allvideos' AND folder = 'content'
37 SELECT * FROM jos_mambots WHERE id = '27'
38 SELECT a.* FROM jos_components AS a WHERE ( a.admin_menu_link = 'option=com_syndicate' OR a.admin_menu_link = 'option=com_syndicate&hidemainmenu=1' ) AND a.option = 'com_syndicate'
39 SELECT m.id FROM jos_modules AS m WHERE m.module = 'mod_rssfeed' AND m.published = 1
40 SELECT id, title, module, position, content, showtitle, params FROM jos_modules AS m INNER JOIN jos_modules_menu AS mm ON mm.moduleid = m.id WHERE m.published = 1 AND m.access <= 0 AND m.client_id != 1 AND ( mm.menuid = 0 OR mm.menuid = 99999999 ) ORDER BY ordering
41 SELECT id FROM jos_menu WHERE link = 'index.php?option=com_search' AND published = 1
42 SELECT m.*, sum(case when p.published=1 then 1 else 0 end) as cnt FROM jos_menu AS m LEFT JOIN jos_menu AS p ON p.parent = m.id WHERE m.menutype='rt_splitSuckerFish' AND m.published='1' AND m.access <= '0' GROUP BY m.id ORDER BY m.parent, m.ordering
43 SELECT m.* FROM jos_menu AS m WHERE menutype='rt_splitSuckerFish' AND m.published='1'
44 SELECT * FROM jos_banner WHERE showBanner=1
45 SELECT id FROM jos_mambots WHERE element = 'mosbookmarks' AND folder = 'content'
46 SELECT * FROM jos_mambots WHERE id = '32'
47 SELECT name, value FROM jos_bookmarks_prefs WHERE userid = '-1' AND category = 'params' ORDER BY name
48 SELECT c.id, c.parent FROM jos_bookmarks_categories as c WHERE c.id = -1
49 SELECT * FROM jos_bookmarks_columns WHERE category='' AND custom='0'
50 SELECT * FROM jos_bookmarks_columns WHERE category='' ORDER BY ordering
51 SELECT * FROM jos_bookmarks_columns WHERE category='admin'
52 SELECT * FROM jos_bookmarks_columns WHERE category='admin' ORDER BY ordering
53 SELECT id FROM jos_mambots WHERE element = 'plugin_jw_allvideos' AND folder = 'content'
54 SELECT * FROM jos_mambots WHERE id = '27'
55 SELECT id FROM jos_mambots WHERE element = 'plugin_jw_allvideos' AND folder = 'content'
56 SELECT * FROM jos_mambots WHERE id = '27'
57 SELECT id FROM jos_mambots WHERE element = 'plugin_jw_allvideos' AND folder = 'content'
58 SELECT * FROM jos_mambots WHERE id = '27'
59 SELECT id FROM jos_mambots WHERE element = 'plugin_jw_allvideos' AND folder = 'content'
60 SELECT * FROM jos_mambots WHERE id = '27'