{"id":1219,"date":"2022-04-22T08:32:06","date_gmt":"2022-04-22T07:32:06","guid":{"rendered":"https:\/\/marketaylor.synology.me\/?p=1219"},"modified":"2022-06-24T16:51:37","modified_gmt":"2022-06-24T15:51:37","slug":"mq-application-compatibility","status":"publish","type":"post","link":"https:\/\/marketaylor.synology.me\/?p=1219","title":{"rendered":"MQ application compatibility across a quarter century"},"content":{"rendered":"\n<p>I was working on something recently where I had to upgrade various components in the tooling. And I was getting more and more annoyed that the upgrades broke my existing programs and scripts. None of that was MQ&#8217;s fault and I&#8217;ll write more about the project once it&#8217;s available alongside the <a href=\"http:\/\/www.ibm.com\/common\/ssi\/ShowDoc.wss?docURL=\/common\/ssi\/rep_ca\/9\/897\/ENUS222-129\/index.html&amp;request_locale=en\" target=\"_blank\" rel=\"noreferrer noopener\">newly-announced MQ 9.3<\/a>. [That article is now published <a href=\"https:\/\/marketaylor.synology.me\/?p=1236\" target=\"_blank\" rel=\"noreferrer noopener\">here<\/a>.] But it got me thinking about the efforts we&#8217;ve made to keep MQ application compatibility across its lifetime. I wanted to show how we&#8217;ve achieved that across a quarter century (and more). And how that has preserved the work that developers have put into their MQ programs. In particular, I want to see if old compiled programs can still work with a current queue manager.<\/p>\n\n\n\n<!--more-->\n\n\n\n<h3 class=\"wp-block-heading\">Source compatibility<\/h3>\n\n\n\n<p>Most people probably understand how the MQ API makes it possible to add new function without fundamentally changing the interface. Using versioned structures means that new fields get added to a structure, and the queue manager code can use the version to decide whether or not to look at or fill in those fields. There are some aspects of the original API design which are hard or near-impossible to extend, and which I wish had been done differently. But the basic idea has held up very well. <\/p>\n\n\n\n<p>It means that you can take application source code written many years ago, and recompile it on a new system, knowing it still builds. Not bumping the &#8220;default&#8221; version for a structure means that you get the same behaviour as before &#8211; you only have to move to an <code>MQCNOv6<\/code> if you want to use the <code>CcdtUrl<\/code> attribute. And that requires that you use a particular version of MQ to recognise it. If you use an <code>MQCNOv6<\/code> against an old queue manager, the application will fail. So you can continue to use an older structure version without changing the code as the defaults have not changed. <\/p>\n\n\n\n<p>Application problems on migrating to new versions have typically happened when the app has not been written to expect new message formats or receiving newer error codes, or when MQ has tightened up its validation to catch applications that have not completely followed rules..<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Binary compatibility<\/h3>\n\n\n\n<p>What I was more interested in for this exercise however was binary compatibility. Can I take an old compiled application program and still run it against today&#8217;s queue manager.<\/p>\n\n\n\n<p>I visited the <a href=\"https:\/\/slx-online.biz\/hursley\/the_museum.asp\" target=\"_blank\" rel=\"noreferrer noopener\">Hursley Museum<\/a> to see if they could help. They could. Their catalogue listed a copy of MQSeries V2.2.1 for AIX. (Actually the first box they dug out from the shelves had an empty CD case, but they found another unopened package that did have the CD.) It&#8217;s not quite the oldest we ever did for AIX, which was Version 2.1, but I couldn&#8217;t locate that level on a medium that I could still read. Using AIX was ideal for this experiment because it&#8217;s a system I have access to and where we still develop MQ. But none of my machines have an 8mm or QIC tape drive attached these days.<\/p>\n\n\n\n<p>The only other still-supported platforms from that time are z\/OS and iSeries. All the other early platforms either died away or lost enough support that we don&#8217;t do current versions of MQ for them. Other operating systems such as Windows (starting with NT) and <a href=\"https:\/\/marketaylor.synology.me\/?p=393\" target=\"_blank\" rel=\"noreferrer noopener\">Linux<\/a> came to the queue manager world later.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">The box<\/h4>\n\n\n\n<figure class=\"wp-block-image size-large is-style-default\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/marketaylor.synology.me\/wp-content\/uploads\/2022\/04\/unboxing-1024x576.png\" alt=\"\" class=\"wp-image-1223\" srcset=\"https:\/\/marketaylor.synology.me\/wp-content\/uploads\/2022\/04\/unboxing-1024x576.png 1024w, https:\/\/marketaylor.synology.me\/wp-content\/uploads\/2022\/04\/unboxing-300x169.png 300w, https:\/\/marketaylor.synology.me\/wp-content\/uploads\/2022\/04\/unboxing-768x432.png 768w, https:\/\/marketaylor.synology.me\/wp-content\/uploads\/2022\/04\/unboxing-1200x675.png 1200w, https:\/\/marketaylor.synology.me\/wp-content\/uploads\/2022\/04\/unboxing.png 1280w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px\" \/><figcaption>Unboxing &#8211; reveals REAL BOOKS and lots of the dancers<\/figcaption><\/figure>\n\n\n\n<p>I put the CD into the system and looked at the dates:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">$ cd \/cdrom\n$ ls -al \ntotal 46300\n-r-xr-xr-x. 1 root root  5683200 Oct 17  1995 dtextbrw.obj\n-r-xr-xr-x. 1 root root 41728000 Oct 17  1995 mqm.obj\n-r-xr-xr-x. 1 root root     5438 Oct 17  1995 .toc<\/pre>\n\n\n\n<p>I considered doing a &#8220;proper&#8221; install of the product, but that would mess up too much of my development environment. Being able to isolate MQ installations was a feature from many years later. And I wasn&#8217;t bothered about trying to run the queue manager code anyway. Noone should be running that kind of unsupported level. Though I would not be surprised to find there are still unlabelled boxes running a business-critical process hidden in a cupboard somewhere. Something to try another day, if I can find a disposable AIX image to play with.<\/p>\n\n\n\n<p>It was the applications that were more interesting. Those are the things that you &#8211; the users &#8211; have developed across many years. And for which you may have lost the source by now, but the programs still have value.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">The sample programs<\/h4>\n\n\n\n<p>So I extracted the sample programs from the installation image and put them in a local directory. <\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">$ ls -l    \ntotal 672\n-rwxrwxrwx    1 metaylor system        10891 13 Nov 1995  amqsbcg\n-rwxrwxrwx    1 metaylor system        14236 13 Nov 1995  amqscic0\n-rwxrwxrwx    1 metaylor system        13654 13 Nov 1995  amqscic21\n-rwxrwxrwx    1 metaylor system       135980 13 Nov 1995  amqsdlq\n-rwxrwxrwx    1 metaylor system         7341 13 Nov 1995  amqsech\n-rwxrwxrwx    1 metaylor system         7133 13 Nov 1995  amqsgbr\n-rwxrwxrwx    1 metaylor system         6591 13 Nov 1995  amqsget\n-rwxrwxrwx    1 metaylor system         6590 13 Nov 1995  amqsgetc\n-rwxrwxrwx    1 metaylor system         9135 13 Nov 1995  amqsinq\n-rwxrwxrwx    1 metaylor system         7741 13 Nov 1995  amqsput\n-rwxrwxrwx    1 metaylor system         7740 13 Nov 1995  amqsputc\n-rwxrwxrwx    1 metaylor system         9123 13 Nov 1995  amqsreq\n-rwxrwxrwx    1 metaylor system         8907 13 Nov 1995  amqsset\n-rwxrwxrwx    1 metaylor system         7785 13 Nov 1995  amqstrg\n-rwxrwxrwx    1 metaylor system        30653 13 Nov 1995  amqsxa4x\n-rwxrwxrwx    1 metaylor system        30971 13 Nov 1995  amqsxaex<\/pre>\n\n\n\n<p>This machine has MQ 9.3 installed as its primary version, so those will be the shared libraries (<em>libmqm <\/em>etc) that the sample programs try to load.<\/p>\n\n\n\n<p>Trying the most basic experiment, of putting and getting messages:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">$ echo \"Hello from 1995\" | .\/amqsput Q V9300_A\nSample AMQSPUT0 start\ntarget queue is Q\nSample AMQSPUT0 end\n$ .\/amqsget Q V9300_A                         \nSample AMQSGET0 start\nmessage &lt;Hello from 1995&gt;\nno more messages\nSample AMQSGET0 end<\/pre>\n\n\n\n<p>And doing the same again but using the client connectivity &#8230;<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">$ export MQSERVER=\"SYSTEM.DEF.SVRCONN\/TCP\/localhost(3820)\"\n$ echo \"Hello from 1995 Client\" | .\/amqsputc Q V9300_A           \nSample AMQSPUT0 start\ntarget queue is Q\nSample AMQSPUT0 end\n$ .\/amqsgetc Q V9300_A     \nSample AMQSGET0 start\nmessage &lt;Hello from 1995 Client&gt;\nno more messages\nSample AMQSGET0 end<\/pre>\n\n\n\n<p>The next experiment was to put a message using a current application program which sets the GroupId. Doing that requires an MQMDv2. The v2 structure was not available in the V2.2.1 days, so what would happen?<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">$ .\/amqsbcg Q V9300_A                          \nAMQSBCG0 - starts here\n \nMQCONN to V9300_A\nMQOPEN - 'Q'\nMQGET of message number 1 \n**** Message descriptor ****\nStrucId  : 'MD  '  Version : 1\n  Report   : 0  MsgType : 8\n  Expiry   : -1  Feedback : 0\n  Encoding : 273  CodedCharSetId : 819\n  Format : 'MQHMDE  '\n  Priority : 0  Persistence : 0\n  MsgId : X'414D512056393330305F412020202020625930D040003A01'\n  CorrelId : X'000000000000000000000000000000000000000000000000'\n  BackoutCount : 0\n  ReplyToQ       : '                                 '\n  ReplyToQMgr    : 'V9300_A                          '\n  ** Identity Context\n  UserIdentifier : 'metaylor    '\n  AccountingToken : \n   X'04363530350000000000000000000000000000000000000000000006'\n  ApplIdentityData : '                               '\n  ** Origin Context\n  PutApplType    : '6'\n  PutApplName    : 'amqsput                     '\n  PutDate  : '20220422'    PutTime  : '06225952'\n  ApplOriginData : '    '\n\n****   Message      ****\nlength - 85 bytes\n00: 4D44 4520 0000 0002 0000 0048 0000 0222 'MDE .......H...'\n10: 0000 04B8 4D51 5354 5220 2020 0000 0000 '....MQSTR  ....'\n20: 2021 2223 2425 2627 2829 2A2B 2C2D 2E2F ' !\"#$%&amp;'()*+,-.\/'\n30: 3031 3233 3435 3637 0000 0001 0000 0000 '01234567........'\n40: 0000 0018 FFFF FFFF 4865 6C6C 6F20 6672 '........Hello fr'\n50: 6F6D 2047 6F                            'om Go           '  \n\nNo more messages \nMQCLOSE\nMQDISC\n\n$  .\/amqsget Q V9300_A\nSample AMQSGET0 start\nmessage &lt;MDE &gt;\nno more messages\nSample AMQSGET0 end\n<\/pre>\n\n\n\n<p>It&#8217;s done its best &#8211; the MQMDE that is the alternative to the MQMDv2 extension has been read. But it doesn&#8217;t know to skip past that to find the real message data.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">The V2 client libraries and PROtocol<\/h4>\n\n\n\n<p>The final test was to try to use the V2.2.1 client libraries properly, completely bypassing the installed V9.3 shared libraries. While I had been fairly confident the previous tests would work, I was more sceptical about this last one. <\/p>\n\n\n\n<p>I had to set LIBPATH to point into my extracted tree instead of the default directories. I also had to set NLSPATH so that the message catalog containing error messages could be read, when things didn&#8217;t work.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">$ export MQSERVER='SYSTEM.DEF.SVRCONN\/TCP\/localhost(3820)'\n$ export NLSPATH=\/mq221\/usr\/lib\/nls\/msg\/prime\/%N\n$ export LIBPATH=\/mq221\/usr\/lpp\/mqm\/lib\n$ echo \"Hello again\" | .\/amqsputc Q V9300_A\nSample AMQSPUT0 start\ntarget queue is Q\nSample AMQSPUT0 end\n$ .\/amqsgetc Q V9300_A\nSample AMQSGET0 start\nmessage &lt;Hello again&gt;\nno more messages\nSample AMQSGET0 end\n$ <\/pre>\n\n\n\n<p>And it works &#8211; the client library located and dynamically loaded what it needed to for the communications, and the channel protocol correctly negotiated and connected to the queue manager. I also used system tools such as <code>ldd<\/code> and <code>truss<\/code> to verify that the right libraries were indeed being found.  The <code>DIS CHS(*)<\/code> on the queue manager showed &#8211; as expected &#8211; empty <code>RVERSION<\/code> and <code>RPRODUCT<\/code> values, another indication that older libraries were in use.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Summary<\/h3>\n\n\n\n<p>It&#8217;s not always been possible to maintain that binary compatibility for old applications in all environments, even where we&#8217;ve continued to deliver queue manager code. Any breakage has tended to be driven by operating system changes rather than MQ itself. For example, AIX changed some of how to compile threaded programs round about that V2.2 timeframe. <\/p>\n\n\n\n<p>MQ has continued to evolve significantly since that early release. All the new capabilities &#8211; functional, environments, APIs &#8211; that we talk about elsewhere and which people need for modern applications and deployments are there. If you want to write a <a href=\"https:\/\/github.com\/ibm-messaging\/mq-dev-patterns\/tree\/master\/serverless\" target=\"_blank\" rel=\"noreferrer noopener\">NodeJS program in a &#8220;serverless&#8221; environment<\/a> that has messages going through MQ, then you can do that. But we bring in those enhancements without ignoring where we&#8217;ve been.<\/p>\n\n\n\n<p>I found the basic proof that we can also still run the old stuff to be quite impressive. And I hope you do too.<\/p>\n<p class=\"last-modified\" style=\"border:1px solid;padding: 10px;\">This post was last updated on June 24th, 2022 at 04:51 pm<\/p>","protected":false},"excerpt":{"rendered":"<p>I was working on something recently where I had to upgrade various components in the tooling. And I was getting more and more annoyed that the upgrades broke my existing programs and scripts. None of that was MQ&#8217;s fault and I&#8217;ll write more about the project once it&#8217;s available alongside the newly-announced MQ 9.3. [That &hellip; <a href=\"https:\/\/marketaylor.synology.me\/?p=1219\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;MQ application compatibility across a quarter century&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":1226,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[5],"tags":[35,20],"class_list":["post-1219","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-mq","tag-ibmmq","tag-mqseries"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>MQ application compatibility across a quarter century - Mark Taylor&#039;s Blog<\/title>\n<meta name=\"description\" content=\"This post shows how MQ has kept application compatibility across a quarter of a century. Not just source code, but also compiled programs.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/marketaylor.synology.me\/?p=1219\" \/>\n<meta property=\"og:locale\" content=\"en_GB\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"MQ application compatibility across a quarter century - Mark Taylor&#039;s Blog\" \/>\n<meta property=\"og:description\" content=\"This post shows how MQ has kept application compatibility across a quarter of a century. Not just source code, but also compiled programs.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/marketaylor.synology.me\/?p=1219\" \/>\n<meta property=\"og:site_name\" content=\"Mark Taylor&#039;s Blog\" \/>\n<meta property=\"article:published_time\" content=\"2022-04-22T07:32:06+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-06-24T15:51:37+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/marketaylor.synology.me\/wp-content\/uploads\/2022\/04\/MQ-Dancing-Men-Small.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"233\" \/>\n\t<meta property=\"og:image:height\" content=\"238\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Mark\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@marketaylor\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Mark\" \/>\n\t<meta name=\"twitter:label2\" content=\"Estimated reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/?p=1219#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/?p=1219\"},\"author\":{\"name\":\"Mark\",\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/#\\\/schema\\\/person\\\/2d6f4113ff54187023e20c20186bbb3c\"},\"headline\":\"MQ application compatibility across a quarter century\",\"datePublished\":\"2022-04-22T07:32:06+00:00\",\"dateModified\":\"2022-06-24T15:51:37+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/?p=1219\"},\"wordCount\":1171,\"commentCount\":1,\"image\":{\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/?p=1219#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/marketaylor.synology.me\\\/wp-content\\\/uploads\\\/2022\\\/04\\\/MQ-Dancing-Men-Small.jpg\",\"keywords\":[\"ibmmq\",\"mqseries\"],\"articleSection\":[\"IBM MQ\"],\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/marketaylor.synology.me\\\/?p=1219#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/?p=1219\",\"url\":\"https:\\\/\\\/marketaylor.synology.me\\\/?p=1219\",\"name\":\"MQ application compatibility across a quarter century - Mark Taylor&#039;s Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/?p=1219#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/?p=1219#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/marketaylor.synology.me\\\/wp-content\\\/uploads\\\/2022\\\/04\\\/MQ-Dancing-Men-Small.jpg\",\"datePublished\":\"2022-04-22T07:32:06+00:00\",\"dateModified\":\"2022-06-24T15:51:37+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/#\\\/schema\\\/person\\\/2d6f4113ff54187023e20c20186bbb3c\"},\"description\":\"This post shows how MQ has kept application compatibility across a quarter of a century. Not just source code, but also compiled programs.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/?p=1219#breadcrumb\"},\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/marketaylor.synology.me\\\/?p=1219\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/?p=1219#primaryimage\",\"url\":\"https:\\\/\\\/marketaylor.synology.me\\\/wp-content\\\/uploads\\\/2022\\\/04\\\/MQ-Dancing-Men-Small.jpg\",\"contentUrl\":\"https:\\\/\\\/marketaylor.synology.me\\\/wp-content\\\/uploads\\\/2022\\\/04\\\/MQ-Dancing-Men-Small.jpg\",\"width\":233,\"height\":238},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/?p=1219#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/marketaylor.synology.me\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"MQ application compatibility across a quarter century\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/#website\",\"url\":\"https:\\\/\\\/marketaylor.synology.me\\\/\",\"name\":\"Mark Taylor&#039;s Blog\",\"description\":\"Messaging, Music and Moving Around\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/marketaylor.synology.me\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-GB\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/#\\\/schema\\\/person\\\/2d6f4113ff54187023e20c20186bbb3c\",\"name\":\"Mark\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/9a5ae091c43730194cba7cabb5d65c1dc3f48d05caaddec6ff2319a1ce66376f?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/9a5ae091c43730194cba7cabb5d65c1dc3f48d05caaddec6ff2319a1ce66376f?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/9a5ae091c43730194cba7cabb5d65c1dc3f48d05caaddec6ff2319a1ce66376f?s=96&d=mm&r=g\",\"caption\":\"Mark\"},\"sameAs\":[\"https:\\\/\\\/x.com\\\/marketaylor\"],\"url\":\"https:\\\/\\\/marketaylor.synology.me\\\/?author=1\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"MQ application compatibility across a quarter century - Mark Taylor&#039;s Blog","description":"This post shows how MQ has kept application compatibility across a quarter of a century. Not just source code, but also compiled programs.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/marketaylor.synology.me\/?p=1219","og_locale":"en_GB","og_type":"article","og_title":"MQ application compatibility across a quarter century - Mark Taylor&#039;s Blog","og_description":"This post shows how MQ has kept application compatibility across a quarter of a century. Not just source code, but also compiled programs.","og_url":"https:\/\/marketaylor.synology.me\/?p=1219","og_site_name":"Mark Taylor&#039;s Blog","article_published_time":"2022-04-22T07:32:06+00:00","article_modified_time":"2022-06-24T15:51:37+00:00","og_image":[{"width":233,"height":238,"url":"https:\/\/marketaylor.synology.me\/wp-content\/uploads\/2022\/04\/MQ-Dancing-Men-Small.jpg","type":"image\/jpeg"}],"author":"Mark","twitter_card":"summary_large_image","twitter_creator":"@marketaylor","twitter_misc":{"Written by":"Mark","Estimated reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/marketaylor.synology.me\/?p=1219#article","isPartOf":{"@id":"https:\/\/marketaylor.synology.me\/?p=1219"},"author":{"name":"Mark","@id":"https:\/\/marketaylor.synology.me\/#\/schema\/person\/2d6f4113ff54187023e20c20186bbb3c"},"headline":"MQ application compatibility across a quarter century","datePublished":"2022-04-22T07:32:06+00:00","dateModified":"2022-06-24T15:51:37+00:00","mainEntityOfPage":{"@id":"https:\/\/marketaylor.synology.me\/?p=1219"},"wordCount":1171,"commentCount":1,"image":{"@id":"https:\/\/marketaylor.synology.me\/?p=1219#primaryimage"},"thumbnailUrl":"https:\/\/marketaylor.synology.me\/wp-content\/uploads\/2022\/04\/MQ-Dancing-Men-Small.jpg","keywords":["ibmmq","mqseries"],"articleSection":["IBM MQ"],"inLanguage":"en-GB","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/marketaylor.synology.me\/?p=1219#respond"]}]},{"@type":"WebPage","@id":"https:\/\/marketaylor.synology.me\/?p=1219","url":"https:\/\/marketaylor.synology.me\/?p=1219","name":"MQ application compatibility across a quarter century - Mark Taylor&#039;s Blog","isPartOf":{"@id":"https:\/\/marketaylor.synology.me\/#website"},"primaryImageOfPage":{"@id":"https:\/\/marketaylor.synology.me\/?p=1219#primaryimage"},"image":{"@id":"https:\/\/marketaylor.synology.me\/?p=1219#primaryimage"},"thumbnailUrl":"https:\/\/marketaylor.synology.me\/wp-content\/uploads\/2022\/04\/MQ-Dancing-Men-Small.jpg","datePublished":"2022-04-22T07:32:06+00:00","dateModified":"2022-06-24T15:51:37+00:00","author":{"@id":"https:\/\/marketaylor.synology.me\/#\/schema\/person\/2d6f4113ff54187023e20c20186bbb3c"},"description":"This post shows how MQ has kept application compatibility across a quarter of a century. Not just source code, but also compiled programs.","breadcrumb":{"@id":"https:\/\/marketaylor.synology.me\/?p=1219#breadcrumb"},"inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/marketaylor.synology.me\/?p=1219"]}]},{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/marketaylor.synology.me\/?p=1219#primaryimage","url":"https:\/\/marketaylor.synology.me\/wp-content\/uploads\/2022\/04\/MQ-Dancing-Men-Small.jpg","contentUrl":"https:\/\/marketaylor.synology.me\/wp-content\/uploads\/2022\/04\/MQ-Dancing-Men-Small.jpg","width":233,"height":238},{"@type":"BreadcrumbList","@id":"https:\/\/marketaylor.synology.me\/?p=1219#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/marketaylor.synology.me\/"},{"@type":"ListItem","position":2,"name":"MQ application compatibility across a quarter century"}]},{"@type":"WebSite","@id":"https:\/\/marketaylor.synology.me\/#website","url":"https:\/\/marketaylor.synology.me\/","name":"Mark Taylor&#039;s Blog","description":"Messaging, Music and Moving Around","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/marketaylor.synology.me\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-GB"},{"@type":"Person","@id":"https:\/\/marketaylor.synology.me\/#\/schema\/person\/2d6f4113ff54187023e20c20186bbb3c","name":"Mark","image":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/secure.gravatar.com\/avatar\/9a5ae091c43730194cba7cabb5d65c1dc3f48d05caaddec6ff2319a1ce66376f?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/9a5ae091c43730194cba7cabb5d65c1dc3f48d05caaddec6ff2319a1ce66376f?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/9a5ae091c43730194cba7cabb5d65c1dc3f48d05caaddec6ff2319a1ce66376f?s=96&d=mm&r=g","caption":"Mark"},"sameAs":["https:\/\/x.com\/marketaylor"],"url":"https:\/\/marketaylor.synology.me\/?author=1"}]}},"jetpack_featured_media_url":"https:\/\/marketaylor.synology.me\/wp-content\/uploads\/2022\/04\/MQ-Dancing-Men-Small.jpg","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/marketaylor.synology.me\/index.php?rest_route=\/wp\/v2\/posts\/1219","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/marketaylor.synology.me\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/marketaylor.synology.me\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/marketaylor.synology.me\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/marketaylor.synology.me\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1219"}],"version-history":[{"count":10,"href":"https:\/\/marketaylor.synology.me\/index.php?rest_route=\/wp\/v2\/posts\/1219\/revisions"}],"predecessor-version":[{"id":1296,"href":"https:\/\/marketaylor.synology.me\/index.php?rest_route=\/wp\/v2\/posts\/1219\/revisions\/1296"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/marketaylor.synology.me\/index.php?rest_route=\/wp\/v2\/media\/1226"}],"wp:attachment":[{"href":"https:\/\/marketaylor.synology.me\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1219"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/marketaylor.synology.me\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1219"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/marketaylor.synology.me\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1219"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}