Skip to content

Last Week in Pony April 30, 2023

Keeping an open source project up and running has lots of hidden time that goes into it. This past week was one of those. A few things that happened, our Windows CI and builds related to anything that uses LibreSSL started failing consistently. Turns out that the site we were getting LibreSSL from was down. After digging around for a while, Sean figured out that cdn.openbsd.org which is what all links on openbsd.org use appears to be far more reliable than the ftp.openbsd.org that is used for links on the LibreSSL site. And, they both have the same content. So, we got to update a bunch of libraries and applications that rely on LibreSSL on Windows to fix the failures. You’ll see a lot of releases related to that change that happened this week.

We also had a MacOS build incident where the version of Python that ships with MacOS Monterey was compiled with an OpenSSL that is no longer supported by urllib and our corral and ponyup stopped uploading to Cloudsmith due to the error that urllib was throwing. The solution there? Install Python via brew in MacOS CI environments to make sure we aren’t using a wicked old Python. The nice side-effect of that one was we realized that we needed to update to making Ventura our supported MacOS version (several months after we should have).

There’s all sorts of stuff that comes up like this that is needed to keep the status quo for a project. So, for all of you who support Pony with your time or your money, thanks. This would all slide into decay were it not for your efforts.

Items of Note

Library updates of interest to Windows users

Our two “ssl” related libraries, ponylang/crypto and ponylang/net_ssl both download LibreSSL and build it for Windows users. Previously, they were downloading from ftp.openbsd.org which has become unstable lately. We updated both libraries to download from the much more stable cdn.openbsd.org.

We suspect all Windows users will want to take advantage of the change as ftp.openbsd.org has been completely down in our testing for over 24 hours and was sporadically unavailable prior to that.

The list of libraries that you need to update in order to fully catch up with the changes are:

Supported MacOS version changed from Monterey to Ventura

We are a little behind the times with this one. We’ve switch all our CI from using MacOS Monterey to MacOS Ventura. That means that Monterey is “best effort” support going forward, there is no official testing on it.

Additionally, all nightlies of corral, ponyc, and ponyup are built on Ventura and in theory, due to system library linking on MacOS, might not work on earlier versions MacOS.

The next official release packages of corral, ponyc, and ponyup will be built on Ventura and the same caveat applies for using them on earlier versions of MacOS.

SSL Builder Updates

The ponylang organization SSL builder Docker images are being updated this week. Every few months we add new builders to support the latest versions of various OpenSSL and LibreSSL API versions.

OpenSSL builder changes

  • 3.1.0 builder added
  • 3.0.7 deprecated. It will stop receiving updates the next time we add a new 3.x OpenSSL builder.
  • 1.1.1t builder added
  • 1.1.1n builder deprecated. It will stop receiving updates the next time we add a new 1.x Open SSL builder.
  • 1.1.1b builder will no longer receive updates

LibreSSL builder changes

  • 3.7.2 builder added
  • 3.5.3 builder deprecated. It will stop receiving updates the next time we add a new 3.x LibreSSL builder.
  • 3.5.2 builder will no longer receive updates

Pony Development Sync

Audio from the April 25th, 2023 sync is available.

Phew! That was a long one. If you listen to this week’s sync recording, strap in. It’s 2 hours long. The breakdown is thus…

There’s an awful lot that went on. We have no idea how much you will be able to follow along at home. Hopefully it’s rewarding.

As a bonus, core team member Matthias Wahl who usually can’t make it to sync ended up joining shortly after we started. It was great to have Matthias contributing during the call. Hopefully we can continue attending.

If this sort of thing interests you, please feel free to attend a Pony Development Sync. We have it on Zoom specifically because Zoom is the friendliest platform that allows folks without an explicit invitation to join. Every week, a development sync reminder with full information about the sync is posted to the announce stream on the Ponylang Zulip. You can stay up-to-date with the sync schedule by subscribing to the sync calendar. We do our best to keep the calendar correctly updated.

Office Hours

We have an open Zoom meeting every Friday for the community to get together and well, do whatever they want. In theory, Sean T. Allen “owns” the meeting and will often set an agenda. Anyone is welcome to show up and participate. Got a Pony related problem you need help solving and prefer to do it synchronously? Give Office Hours a try.

We seem to have settled into Office Hours have 3 regular attendees: Adrian Boyko, Red Davies, and Sean T. Allen. This week’s Office Hours was just the 3 of them.

The primary point of discussion was generative testing, property-based testing, and Red’s usage of it in is LDAP library that he is developing for work. Adrian wasn’t familiar with pony_check, the property-based testing package in the Pony standard library.

Red took Sean and Adrian through a bit of his usage and Adrian started poking around in the docs to get more familiar with it. Sean also discussed his usage of generative testing as part of his work on Confidential ACI at Microsoft.

Sean’s key point was that designing good generative tests is at least has hard as designing “standard unit-tests”. And that it is probably harder to do well.

If you aren’t familiar with pony_check and generative testing, you should stop by Office Hours sometime and discuss with Red and Sean. They are very powerful tools for developing better Pony software. They are both sure that your Pony code would probably benefit from a little pony_check.

If you’d be interested in attending an Office Hours in the future, you should join some time, there’s a calendar you can subscribe to to stay up-to-date with the schedule. We do our best to keep the calendar up-to-date.

Releases

Community Resource Highlight

We like to take a moment in each Last Week in Pony to highlight a community resource. There are many community resources that can go unappreciated until just the right time when someone hops into the Ponylang Zulip asking a question or facing a problem we have all had at one time or another. Well here in Last Week in Pony, we make it just the right time to highlight one of our excellent community resources.

Howdy again! This week we are going to look at one of the fundamental idea of Pony: references capabilities! Specifically I want to draw your attention to the Reference Capabilities Matrix, or as it could also be called the “denial matrix” as it lists what a capability denies.

Looking at the denial matrix, the rows are whether certain local aliases are denied, while the columns are whether certain global aliases are denied. Why do we have a denial matrix in the first place? Why not talk about what a capability allows rather than what it denies? Because this matrix mirrors how the reference capabilities are interrelated. Look at this matrix alongside Ref Cap Subtyping of the Pony cheatsheet and you will see that we can move down a column or right across a row of the denial matrix.

The other reason we sometime refer to this as the denial matrix is that reference capabilities apply to a reference not to the underlying data – a distinction which is most notable if we consider making an opaque tag reference from another reference capability. Imagine for a moment that inside an actor A we have some ref to some Data, with that ref we can read/write to Data – this is mutable data. Now let’s say we take our ref and within actor A we create a new tag – we cannot use this tag to read/write, but we can use it to send a tag from actor A to some actor B. We now have actor A with a ref to Data – which it can use to read from or write to Data – and both actors A and B with tags to Data – which neither can use to read from Data. We now have a reference to mutable Data that has crossed the actor boundary, but this is still safe because the tag that crossed this boundary denies reading and writing. In such a scenario as this one, we could later use the tag in A and the tag in B to identify that both actors are referencing the same, mutable Data.

RFCs

Major changes in Pony go through a community driven process where members of the community can write up “requests for change” that detail what they think should be changed and why. RFCs can range from simple to complex. We welcome your participation.

New


Last Week In Pony is a weekly blog post to catch you up on the latest news for the Pony programming language. To learn more about Pony, check out our website, our Twitter account @ponylang, or our Zulip community.

Got something you think should be featured? There’s a GitHub issue for that! Add a comment to the open “Last Week in Pony” issue.

Interested in making a change, or keeping up with changes to Pony? Check out the RFC repo. Contributors welcome!