Is it possible to build OpenSmalltalk VM for OpenBSD?
If yes, how? If no, is there any other solution available?
OpenBSD ports for 6.4 for AMD64 has only the 3.10-1 version available.
I haven't worked with building the VM on OpenBSD, but I see this past discussions... http://forum.world.st/Squeak-on-OpenBSD-td4945634.html http://forum.world.st/Why-the-hell-directives-for-compiling-with-clang-were-...
So there seem two places to review... https://github.com/OpenSmalltalk/opensmalltalk-vm/compare/c1790b37...krono/o... https://github.com/aryler/ostoobsd
Now it would be really great if you could create folders **build.openbsd32x86** and **build.openbsd64x64** to work in to merge the stuff the two urls above - to make it easier for the next person.
If files/folders need to be organised into a particularly way for OpenBAD Ports, it would be good to have a script to do that to convert from the standard opensmalltalk-vm folder arrangement.
Hey
the Cog branch should build on OpenBSD. If not, ping me.
No need to make a dedicated openbsd folder, just use the linux one(s).
Note that the VM is _not_ w^x compatible, nor mapstack, neither unveil.
I wont push this point, but just to share a thought... One benefit of a dedicated folder is that it "advertises" the availability of a OpenBSD. It helps potential users "feel" more confident about trying it. There will be a percentage of people who came looking, didn't see any reference and just moved on without asking.
If you don't want separate folders for Free/Net/Open-BSD, perhaps a **build.bsd64x64** folder would be appropriate?
well, it even could be unix bla but that is a whole different story.
Maybe have a different issue for that?
Can you do the build scripts less Bash? Or even better, can use Makefiles for that?
I understand your point.
We've had a lot of discussing about the whole build infrastructure and as it stands, it currently works for all the major dists we can support; moreover at the moment we have to focus on other parts of the VM.
That means that the build infra (directories, bash, etc) will stay as is until we have enough manpower and consesus to find a more universal solution.
That being said, opensmalltalk-vm works and compiles on OpenBSD. Yes it needs ports, but I think especiallt @ckeen can give some pointers on how to do things efficiently around that parts.
If anyone steps up making an upgrade to the port, all PRs are welcome.
Take a look:
[output.log](https://github.com/OpenSmalltalk/opensmalltalk-vm/files/3474660/output.log)
@asarch I have re-run your build on OpenBSD 6.4 and cannot reproduce.
Btw, do you really want to build a newspeak VM? I suggest starting with a plain squeak vm, which would mean starting ins
opensmalltalk-vm/build.linux64x64/squeak.cog.spur/build
Also, make sure that you run squeak on a `w^x`-_disabled_ mount, otherwise it won't start (that's what's happening, I think): ```shell # mount /dev/sd0a on / type ffs (local, wxallowed) ```
Does it need to be root for compilation?
[output.log](https://github.com/OpenSmalltalk/opensmalltalk-vm/files/3483925/output.log)
Here is my `/etc/fstab`:
``` 63a90b947a6cabb5.b none swap sw #63a90b947a6cabb5.a / ffs rw,softdep,wxallowed 1 1 63a90b947a6cabb5.a / ffs rw,softdep 1 1 63a90b947a6cabb5.d /home ffs rw,softdep,nodev,nosuid 1 2 ```
The mounted partitions:
``` $ mount /dev/sd0a on / type ffs (local, softdep) /dev/sd0d on /home type ffs (local, nodev, nosuid, softdep) ```
What's wrong?
It is missing `wxallowed` as in the commented line.
OpenSmalltalk-VM needs wxallowed to run, at the moment.
Ok, after doing a `dd if=/dev/zero of=/dev/rsd0c bs=1m count=1` by mistake in order to create a **vnconfig** device for compilation and restoring the entire system, I have:
[output.log](https://github.com/OpenSmalltalk/opensmalltalk-vm/files/3489145/output.log)
So, If used the Squeak5.2-18229-64bit.image, Squeak5.2-18229-64bit.changes and SqueakV50.sources from **http://squeak.org/** and this is what I have now:
![Screenshot from 2019-08-10 12-23-06](https://user-images.githubusercontent.com/906401/62824967-e89bde00-bb69-11e9...)
One last question: how do you install it?
* asarch notifications@github.com [190810 19:26]:
Ok, after doing a `dd if=/dev/zero of=/dev/rsd0c bs=1m count=1` by mistake in order to create a **vnconfig** device for compilation and restoring the entire system, I have:
[output.log](https://github.com/OpenSmalltalk/opensmalltalk-vm/files/3489145/output.log)
So, If used the Squeak5.2-18229-64bit.image, Squeak5.2-18229-64bit.changes and SqueakV50.sources from **http://squeak.org/** and this is what I have now:
![Screenshot from 2019-08-10 12-23-06](https://user-images.githubusercontent.com/906401/62824967-e89bde00-bb69-11e9...)
One last question: how do you install it?
I have the repo in /usr/local/smalltalk. You should need to copy the respective product/ subdir to a place with the wxallowed bit set.
I do keep the whole git repo there though and occasionally update and set my PATH accordingly.
You could have a look at the outdated squeak port for inspiration on the proper install locations but IDK whether that's worth the hassle tbh.
Kind regards,
Christian
Thank you!
Thank you very much for all guys.
@asarch Great to see it working for you. Sorry for your borked installation, tho :/
On the contrary, thank you, thank you very much for your patience and your time. Thank you.
P.S.
Just one last issue if I may, how would you compile the image from sources?:
http://files.squeak.org/sources_files/SqueakV50.sources.gz
On 2019-08-13, at 11:11 AM, asarch notifications@github.com wrote:
On the contrary, thank you, thank you very much for your patience and your time. Thank you.
P.S.
Just one last issue if I may, how would you compile the image from sources?:
That's just not how it works. It *is* possible to build an image from a prescriptive definition - some folk on the Pharo list did a version last year I think, and Alejandro did a related project around '03 and I did some stuff and Craig has done a bunch of related stuff. But as a normal thing it simply doesn't mean anything. We have an image, we modify it and save it and start it, rinse and repeat. Dave Ungar pointed out many years ago that Smalltalk is saved but not born again.
tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim fallacio (n): speaking logical fallacies
Am 13.08.2019 um 21:00 schrieb tim Rowledge tim@rowledge.org:
On 2019-08-13, at 11:11 AM, asarch notifications@github.com wrote:
On the contrary, thank you, thank you very much for your patience and your time. Thank you.
P.S.
Just one last issue if I may, how would you compile the image from sources?:
That's just not how it works. It *is* possible to build an image from a prescriptive definition - some folk on the Pharo list did a version last year I think, and Alejandro did a related project around '03 and I did some stuff and Craig has done a bunch of related stuff. But as a normal thing it simply doesn't mean anything. We have an image, we modify it and save it and start it, rinse and repeat. Dave Ungar pointed out many years ago that Smalltalk is saved but not born again.
Pharo since version 7.0 is bootstrapped on every build. And it is surely the best way to get a reliable artefact
Have a look at
https://github.com/pharo-project/pharo/tree/Pharo8.0/bootstrap
Norbert
tim
tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim fallacio (n): speaking logical fallacies
_Dave Ungar pointed out many years ago that Smalltalk is saved but not born again._
Nice quote.
Norbert writes:
Pharo since version 7.0 is bootstrapped on every build. And it is surely the best way to get a reliable artifact.
The approach you cited uses a plethora of external tools processing source code. That's composition, but not bootstrapping (something building itself, or "pulling itself up by its own bootstraps").
Whether you consider the essence of the system to reside in that source code or in machine instructions, reliability comes from being able to explain why each bit in the resulting artifact is there. I think that process is most understandable, and most effectively verified, when the space of those external tools is smallest. This is why I prefer systems that actually do bootstrap.
-C
Am 14.08.2019 um 11:54 schrieb Craig Latta notifications@github.com:
Norbert writes:
Pharo since version 7.0 is bootstrapped on every build. And it is surely the best way to get a reliable artifact.
The approach you cited uses a plethora of external tools processing source code. That's composition, but not bootstrapping (something building itself, or "pulling itself up by its own bootstraps“).
You are of course welcome to put your own definition of bootstrapping. But why is this better? So bootstrapping should mean no operating system, no interpreter (like a shell) in between? Where is the defined border? I’ve never compiled a C compiler without having an assembler and C compiler, a shell and shell scripts at hand. So I’m really interested where it is defined exactly. Pharo constructs in an image another image from nothing, then it loads some binary packages until the point it has a compiler. I’m not sure at the moment if the compiler recompiles everything again. I think you can call that bootstrapping
Whether you consider the essence of the system to reside in that source code or in machine instructions, reliability comes from being able to explain why each bit in the resulting artifact is there. I think that process is most understandable, and most effectively verified, when the space of those external tools is smallest. This is why I prefer systems that actually do bootstrap.
I agree that the set of external tools should be small. By using the term „reliable“ it was regarding the artefact produced a.k.a the image. In the sense of being able to produce a bit identical artefact you can reason about. Maybe I should have used reproducible to make it more clear. But then we are not speaking my native language, you know?
Norbert
-C
— You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/OpenSmalltalk/opensmalltalk-vm/issues/413?email_source=notifications&email_token=AIJPEWZDTI4VE5GU33HNUUTQEPI5RA5CNFSM4IHOIK62YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOD4IJTOI#issuecomment-521181625, or mute the thread https://github.com/notifications/unsubscribe-auth/AIJPEW4FELZNZA7Q6H5AMQ3QEPI5RANCNFSM4IHOIK6Q.
Hi Norbert--
Pharo since version 7.0 is bootstrapped on every build. And it is surely the best way to get a reliable artifact.
The approach you cited uses a plethora of external tools processing source code. That's composition, but not bootstrapping (something building itself, or "pulling itself up by its own bootstraps“).
You are of course welcome to put your own definition of bootstrapping.
Heh; unsurprisingly, I assert that it's your usage that departs from the traditional meaning. :)
But why is this better?
Something building itself is better because it minimizes the cognitive load on the human attempting to understand it, by not involving so many external tools whose compositions and interactions must also be understood. It presents a more concise statement of what the system is.
For me, this makes working on the system more fun, faster, and easier to teach. I also find the resulting systems are less brittle, because there are fewer independently evolving components which can break things.
So bootstrapping should mean no operating system, no interpreter (like a shell) in between? Where is the defined border?
As much as possible, sure. In this case I'd use an operating system only as much as I needed to run a virtual machine. (Bootstrapping the virtual machine is a large area of this conversation, as yet unentered. :)
I’ve never compiled a C compiler without having an assembler and C compiler, a shell and shell scripts at hand. So I’m really interested where it is defined exactly.
I think the nature of the resulting artifact influences how relevant bootstrapping is. When building a C compiler, you probably don't care how it was that the existing C compiler you're using came to be. And developers using the built C compiler are usually much less concerned with dynamic behavior and self-reflection than Smalltalk developers are.
The example I would use is of a germinating seed. I think it's appropriate to allow special behavior earlier, leading to the existence of seeds, that is repeated less often later. We should minimize that part. Most of the work is then done by the seed operating upon itself, not by outside things operating upon it.
Pharo constructs in an image another image from nothing, then it loads some binary packages until the point it has a compiler. I’m not sure at the moment if the compiler recompiles everything again. I think you can call that bootstrapping.
I don't. That's one Pharo system composing another one, according to a plan which exists in the union of the first system and a bunch of external scripts fed to external tools. The plan is the interesting thing, and it's far from nothing.
I agree that the set of external tools should be small. By using the term „reliable“ it was regarding the artifact produced a.k.a the image. In the sense of being able to produce a bit-identical artifact you can reason about.
Right, that's what I understood you to mean.
Maybe I should have used reproducible to make it more clear.
I think reproducible composition is actually what you're discussing. One can achieve it with bootstrapping, and also with what Pharo is doing. :) The two are not synonymous, so I don't think it's a matter of being more clear, or which natural language we're using here.
Certainly reproducibility is a crucial quality; reflectivity and minimalism are as well. The object memory composition Pharo does is a very useful step, but there's more to do before achieving bootstrapping, and the specification and comprehension benefits that come with it.
-C
-- Craig Latta Black Page Digital Amsterdam :: San Francisco craig@blackpagedigital.com +31 6 2757 7177 + 1 415 287 3547
Closed #413.
This thread, while quite interesing, is going off-topic.
I invite you all to continue the discussion over at [vm-dev](http://lists.squeakfoundation.org/mailman/listinfo/vm-dev) (or its [nabble mirror](http://forum.world.st/Squeak-VM-f104410.html)).
Argh, that is what I thought I did. I‘m getting old 😀
No problem. All issues here are mirrored at vm-dev. But lets focus on issues present here at github and keep the general discussion over at vm-dev.
vm-dev@lists.squeakfoundation.org