<html>
  <head>

    <meta http-equiv="content-type" content="text/html; charset=utf-8">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    <meta charset="utf-8">
    <p style="color: rgb(51, 51, 51); font-family: Georgia, 'Times New
      Roman', 'Bitstream Charter', Times, serif; font-size: 16px;
      font-style: normal; font-variant: normal; font-weight: normal;
      letter-spacing: normal; line-height: 24px; orphans: auto;
      text-align: start; text-indent: 0px; text-transform: none;
      white-space: normal; widows: 1; word-spacing: 0px;
      -webkit-text-stroke-width: 0px;">I had the idea that a plugin from
      one VM could be dragged into another VM's directory and that it
      could be used just by starting up the image. I've done a little
      experimenting and it seems more of an idea of a reality. The
      functionality is there, but VM developers over the years have not
      seen this as a priority. Typically plugins and their VMs are
      compiled together. Or a person adds one by recompiling a VM
      compilation rig they already have.</p>
    <p style="color: rgb(51, 51, 51); font-family: Georgia, 'Times New
      Roman', 'Bitstream Charter', Times, serif; font-size: 16px;
      font-style: normal; font-variant: normal; font-weight: normal;
      letter-spacing: normal; line-height: 24px; orphans: auto;
      text-align: start; text-indent: 0px; text-transform: none;
      white-space: normal; widows: 1; word-spacing: 0px;
      -webkit-text-stroke-width: 0px;">As I had a rig for the
      Interpreter VM I decided to compile a plugin and see if I could
      drag it around to other VM directories for use. Most times it
      didn't work.</p>
    <p style="color: rgb(51, 51, 51); font-family: Georgia, 'Times New
      Roman', 'Bitstream Charter', Times, serif; font-size: 16px;
      font-style: normal; font-variant: normal; font-weight: normal;
      letter-spacing: normal; line-height: 24px; orphans: auto;
      text-align: start; text-indent: 0px; text-transform: none;
      white-space: normal; widows: 1; word-spacing: 0px;
      -webkit-text-stroke-width: 0px;">I compiled a TheUniversalAnswer
      plugin which returns 42. I moved it from a 4.14.1-3430 VM to a
      4.14.1-3414 VM. I could get it to work if I did not use the
      squeak.sh start script. That is, I dragged so.vm-sound-null,
      so.TheUniversalAnswer and so.vm-display-X11 into the same
      directory as the VM binary. That worked.</p>
    <p style="color: rgb(51, 51, 51); font-family: Georgia, 'Times New
      Roman', 'Bitstream Charter', Times, serif; font-size: 16px;
      font-style: normal; font-variant: normal; font-weight: normal;
      letter-spacing: normal; line-height: 24px; orphans: auto;
      text-align: start; text-indent: 0px; text-transform: none;
      white-space: normal; widows: 1; word-spacing: 0px;
      -webkit-text-stroke-width: 0px;">The only way to see the external
      plugins is with #listLoadedModules. But, irritatingly, modules are
      loaded as needed, so once you have proof of using the primitive
      from the plugin, yea, it will appear as a result of that Smalltalk
      listLoadedModules message. So, it's not that useful.</p>
    <p style="color: rgb(51, 51, 51); font-family: Georgia, 'Times New
      Roman', 'Bitstream Charter', Times, serif; font-size: 16px;
      font-style: normal; font-variant: normal; font-weight: normal;
      letter-spacing: normal; line-height: 24px; orphans: auto;
      text-align: start; text-indent: 0px; text-transform: none;
      white-space: normal; widows: 1; word-spacing: 0px;
      -webkit-text-stroke-width: 0px;">I dragged so.TheUniversalAnswer
      around to other VMs such as 4.0.3-2202 and 4.13.10-3268 without
      success. And the unload selectors #forgetModule: and
      unloadModule:, which both use primitive 571 don't appear to work
      on my Ubuntu 15.04.</p>
    <p style="color: rgb(51, 51, 51); font-family: Georgia, 'Times New
      Roman', 'Bitstream Charter', Times, serif; font-size: 16px;
      font-style: normal; font-variant: normal; font-weight: normal;
      letter-spacing: normal; line-height: 24px; orphans: auto;
      text-align: start; text-indent: 0px; text-transform: none;
      white-space: normal; widows: 1; word-spacing: 0px;
      -webkit-text-stroke-width: 0px;">So, I don't know if a community
      of plugins passed around is in the offing. What I have learned is
      that many of the answers are in sqUnixExternalPrims.c. The issues
      are really where does the VM look for primitives and what does it
      do when it finds one. It appears to me, after reading both the
      non-Cog and Cog versions of that file, that this an interesting
      area poorly documented that VM developers alter in haste to get on
      to something else.</p>
    <p style="color: rgb(51, 51, 51); font-family: Georgia, 'Times New
      Roman', 'Bitstream Charter', Times, serif; font-size: 16px;
      font-style: normal; font-variant: normal; font-weight: normal;
      letter-spacing: normal; line-height: 24px; orphans: auto;
      text-align: start; text-indent: 0px; text-transform: none;
      white-space: normal; widows: 1; word-spacing: 0px;
      -webkit-text-stroke-width: 0px;">It's pretty important stuff,
      though. Do you start the VM with the binary on the path? Do you
      use squeak.sh? Where is the VM looking for stuff. Where will FFI
      look for stuff. And so on.<br>
    </p>
    <p style="color: rgb(51, 51, 51); font-family: Georgia, 'Times New
      Roman', 'Bitstream Charter', Times, serif; font-size: 16px;
      font-style: normal; font-variant: normal; font-weight: normal;
      letter-spacing: normal; line-height: 24px; orphans: auto;
      text-align: start; text-indent: 0px; text-transform: none;
      white-space: normal; widows: 1; word-spacing: 0px;
      -webkit-text-stroke-width: 0px;">Chris <br>
    </p>
  </body>
</html>