From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Authentication-Results: plum.tunbury.org; dkim=pass (1024-bit key; unprotected) header.d=inria.fr header.i=@inria.fr header.a=rsa-sha256 header.s=dc header.b=XY9JzzzX; dkim=fail reason="signature verification failed" (1024-bit key; secure) header.d=polytechnique.org header.i=@polytechnique.org header.a=rsa-sha256 header.s=svoboda header.b=uQwXj2vc; dkim-atps=neutral Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=192.134.164.83; helo=mail2-relais-roc.national.inria.fr; envelope-from=caml-list-owner@inria.fr; receiver=tunbury.org Received: from mail2-relais-roc.national.inria.fr (mail2-relais-roc.national.inria.fr [192.134.164.83]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by plum.tunbury.org (Postfix) with ESMTPS id 89E6B4003A for ; Tue, 10 Jun 2025 13:36:49 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=inria.fr; s=dc; h=from:to:date:message-id:mime-version:subject:reply-to: sender:list-id:list-help:list-subscribe:list-unsubscribe: list-post:list-owner:list-archive; bh=MCm3mKGjPRiIFkwHKj+hQerq9QEwI5Gj6QEMETpvKy0=; b=XY9JzzzX+dHZyZN7RXfCodrYD5JnZXFpBZNLVTuvk+lXtVTW5T1RfSdD WzPjbwEwQWgfmtAw1KjcxYu2StoYHIYw3TeQ8JD2FRjdVrq3VBWCbyaYQ e8P1fBcThoRrmt+gBwtFf6pQCYCnipE+BpfK8bUmzGzo4Iv8aJxVcxrtf 0=; Received-SPF: Pass (mail2-relais-roc.national.inria.fr: domain of caml-list-owner@inria.fr designates 128.93.162.160 as permitted sender) identity=mailfrom; client-ip=128.93.162.160; receiver=mail2-relais-roc.national.inria.fr; envelope-from="caml-list-owner@inria.fr"; x-sender="caml-list-owner@inria.fr"; x-conformance=spf_only; x-record-type="v=spf1"; x-record-text="v=spf1 include:mailout.safebrands.com a:basic-mail.safebrands.com a:basic-mail01.safebrands.com a:basic-mail02.safebrands.com ip4:128.93.142.0/24 ip4:192.134.164.0/24 ip4:128.93.162.160 ip4:128.93.162.3 ip4:128.93.162.88 ip4:89.107.174.7 mx ~all" Received-SPF: None (mail2-relais-roc.national.inria.fr: no sender authenticity information available from domain of postmaster@sympa.inria.fr) identity=helo; client-ip=128.93.162.160; receiver=mail2-relais-roc.national.inria.fr; envelope-from="caml-list-owner@inria.fr"; x-sender="postmaster@sympa.inria.fr"; x-conformance=spf_only Authentication-Results: mail2-relais-roc.national.inria.fr; spf=Pass smtp.mailfrom=caml-list-owner@inria.fr; spf=None smtp.helo=postmaster@sympa.inria.fr; dkim=hardfail (signature did not verify [final]) header.i=@polytechnique.org X-IronPort-AV: E=Sophos;i="6.16,225,1744063200"; d="scan'208,217";a="226117224" Received: from prod-listesu18.inria.fr (HELO sympa.inria.fr) ([128.93.162.160]) by mail2-relais-roc.national.inria.fr with ESMTP; 10 Jun 2025 15:36:48 +0200 Received: by sympa.inria.fr (Postfix, from userid 20132) id 3D5B3E0CD8; Tue, 10 Jun 2025 15:36:48 +0200 (CEST) Received: from mail3-relais-sop.national.inria.fr (mail3-relais-sop.national.inria.fr [192.134.164.104]) by sympa.inria.fr (Postfix) with ESMTPS id 4B3CCE0131 for ; Tue, 10 Jun 2025 15:36:43 +0200 (CEST) IronPort-SDR: 684834e9_l29JS5Lt87g7ulQ/rQ4PD66D7M+u54H1inJ1DnW+/L03uNo 3ilWtNa19O79UCwyiDteffQ3JCYhZ5Nt46ZL+6w== X-IPAS-Result: =?us-ascii?q?A0EGDgB6M0hohSIeaIFaFgcBATwBBQUBAgEJAYFqAYE+W?= =?us-ascii?q?ygZAWAGWhEiBwhJhFWDT44inESCegMuIxUBAwENFAIBAg4HAQUaAQIEAQEDA?= =?us-ascii?q?QIBggyCdAIWi08CHwYBBDQTAQIEAQEBAQMCAwEBAQEBARABAQUBAQECAQECB?= =?us-ascii?q?AYBAhABAQEBQEmFew1JAQEECwGBahk4cYElAQEBAQEBAQEBAQEBAQEBAQEBA?= =?us-ascii?q?QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAggEAQIxKz4CCQoTAQE4GCMDEAQBB?= =?us-ascii?q?gMCBA0BNRcBEhqCEFgBgh8CAksDBAEMBj+SF5tLeoEygQGCDAEBBoEIPgIBC?= =?us-ascii?q?wICAwEOCSUB2gqBG0oJgUkBhWyCSRoBKkhrhEqEPCcPgVVEgRWBO4E+b4I/C?= =?us-ascii?q?xcBAQEBGERdAwEBTQmDJYJpghEXgQIUHYIugxyEOIUGgkeCdowdgUQiAyYzL?= =?us-ascii?q?AFVExcLBwVbgQgDKjQxbjIdgg2FGYISggSJAYRJK0+FIYEmg2ERE3IPBxpAA?= =?us-ascii?q?wttPTcUG5hNHCgagyMOCy0GAQEsECMBKAUBExYCUAQEDhUgBBURDAkFCQQYK?= =?us-ascii?q?AYJAgsCLZJMNCqPU44dk1CBCjQHhB6BXgYMiQeBJpIsg1eFW6UGIphiIoldg?= =?us-ascii?q?SYJYIF5lVIGJoUzgX8jPIEgMxowQ4JnCQo8HA+RQ1sDgT6BJoF0O4JmB69ZQ?= =?us-ascii?q?TUCAQE4AgcBCgEBAwmFRR0BAWmCG4IXhUyBSwEB?= IronPort-PHdr: A9a23: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 IronPort-Data: A9a23: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 tVhD7bSyahFxI1sNGWq9Dg0 IronPort-HdrOrdr: A9a23:+2Rl5a1MLEgCYiJjARmTDAqjBSpyeYIsimQD101hICG9Lfb0qy n+pp4mPEHP4wr5AEtQ/uxoS5PwJ080lKQFlrX5Uo3SOTUO1FHHEGgA1/qV/9SDIVybygc178 4JH8dD4bbLbWSS+PyKgjVQZOxQo+VvnprIuc7ui1NWCS16YaBp6Al0TiyBFFdteQVADZ0lUL KB+8tuvVObCDwqR/X+IkNAc/nIptXNmp6jSwUBHQQb5A6Hii7twKLmEiKfwgwVX1p0sPwfGC n+4kbED5eYwr2GIyznpiDuBlNt6ZXcI+54dYGxYw4uW3TRY0iTFcRcsva5zUkISamUmS4XeZ /30l4d1o1Imgnslm3Zm2qX5yDwlDkp8HPs0lmenD/qptH4XiszD45biZteaQax0TtTgDhQ6t M644uijeslMTrQ2CDmo9TYXRBjkUS55XIkjO4IlnRaFY8TcqVYo4AT9F5cVM5oJlOP1Kk3VO 11SM3M7vdfdl2XK3jfo2l02dSpGnA+BA2PTEQOstGclzJWgHd6xU0Fw9F3pAZ0yLstD51fo+ jUOKVhk79DCscQcKJmHe8EBdC6D2TcKCi8QV564W6Xap3vF0i91KIfuo9Fmd1CUKZ4sKcPpA == X-Talos-CUID: =?us-ascii?q?9a23=3AlxbTn2lWXaoHuK4IEelCNhffm4jXOXLh/C/Ucha?= =?us-ascii?q?UMmdGb+CtGHq+2Lxjq8U7zg=3D=3D?= X-Talos-MUID: 9a23:9hFQWgaGRdSbgOBTrGLr1TZeMu5RvYegUkcJjrcbu9fHDHkl X-IronPort-Anti-Spam-Filtered: true X-IronPort-AV: E=Sophos;i="6.16,225,1744063200"; d="scan'208,217";a="118659883" X-MGA-submission: =?us-ascii?q?MDGQxlIssApW5W+YSSdCTZLry+kVEudcmUcV4a?= =?us-ascii?q?8z0BVztxwoKAwzt4S63VaUaUmowmqpQ+Wu1JZbLaA8Gkh/yOosXtzTeh?= =?us-ascii?q?OYavaufScW0mUugw2jYuB9PvACvw7Nlggwn4/vbbanomnV3JNKuFjyjD?= =?us-ascii?q?blfFWucoBq7D3b+qut0iStZg=3D=3D?= Received: from mx1.polytechnique.org ([129.104.30.34]) by mail3-smtp-sop.national.inria.fr with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 10 Jun 2025 15:36:42 +0200 Received: from TM.local (unknown [82.66.240.41]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ssl.polytechnique.org (Postfix) with ESMTPSA id C4E03564E75; Tue, 10 Jun 2025 15:36:40 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=polytechnique.org; s=svoboda; t=1749562600; bh=9Q2E0rB3vyLrrgXCXR7ke6IhhLm2ibq4a4zCTP2CH+M=; h=From:To:Subject:Date:Message-ID; b=uQwXj2vcemzS/Z1d/DcLF+ISXeqdjmKc7huZ68bmRUFYLEvNhr40YUyavVsFm88HN BKV1JXmS978nsbViGuB7X4Iydw5PEuXPmUREOR/PjqFPbUIIXwa78T4Z1sDULzkmdH OBXEYW20rYWQOid2kXs/nKoqfHBhhfh/K5llekKw= From: Alan Schmitt To: "lwn" , caml-list@inria.fr Date: Tue, 10 Jun 2025 15:36:40 +0200 Message-ID: MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="=-=-=" X-AV-Checked: ClamAV using ClamSMTP at svoboda.polytechnique.org (Tue Jun 10 15:36:41 2025 +0200 (CEST)) X-Spam-Flag: No, tests=bogofilter, spamicity=0.308463, queueID=04E12564E77 X-Org-Mail: alan.schmitt.1995@polytechnique.org Subject: [Caml-list] Attn: Development Editor, Latest OCaml Weekly News Reply-To: Alan Schmitt X-Loop: caml-list@inria.fr X-Sequence: 19339 Errors-To: caml-list-owner@inria.fr Precedence: list Precedence: bulk Sender: caml-list-request@inria.fr X-no-archive: yes List-Id: List-Help: List-Subscribe: List-Unsubscribe: List-Post: List-Owner: List-Archive: Archived-At: --=-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: base64 SGVsbG8NCg0KSGVyZSBpcyB0aGUgbGF0ZXN0IE9DYW1sIFdlZWtseSBOZXdzLCBmb3IgdGhlIHdl ZWsgb2YgSnVuZSAwMyB0byAxMCwNCjIwMjUuDQoNClRhYmxlIG9mIENvbnRlbnRzDQrilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIANCg0KUG9ydGFibGUg RXh0ZXJuYWwgRGVwZW5kZW5jaWVzIGZvciBEdW5lIFBhY2thZ2UgTWFuYWdlbWVudA0KU2VtZ3Jl cCBpcyBoaXJpbmcgT0NhbWwgZGV2ZWxvcGVycyB0byB3b3JrIG9uIHRoZSBzdGF0aWMgYW5hbHlz aXMgZW5naW5lDQpFbHBlLCBhIGNvbmZpZy1hcy1jb2RlIGJ1aWxkIHN5c3RlbSB3cml0dGVuIGlu IE9DYW1sK1J1c3QNCkR1bmUgZGV2IG1lZXRpbmcNCk90aGVyIE9DYW1sIE5ld3MNCk9sZCBDV04N Cg0KDQpQb3J0YWJsZSBFeHRlcm5hbCBEZXBlbmRlbmNpZXMgZm9yIER1bmUgUGFja2FnZSBNYW5h Z2VtZW50DQrilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZANCg0KICBBcmNoaXZlOg0KICA8aHR0cHM6Ly9kaXNjdXNzLm9jYW1sLm9yZy90 L3BvcnRhYmxlLWV4dGVybmFsLWRlcGVuZGVuY2llcy1mb3ItZHVuZS1wYWNrYWdlLW1hbmFnZW1l bnQvMTY3NjcvMT4NCg0KDQpTdGV2ZSBTaGVycmF0dCBhbm5vdW5jZWQNCuKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gA0KDQogIER1bmUgbG9jayBkaXJlY3RvcmllcyByZWNvcmQgdGhlIG5hbWVzIG9mIGFueSBzeXN0 ZW0gcGFja2FnZXMgbmVlZGVkDQogIHRvIGJ1aWxkIHByb2plY3RzIG9yIHRoZWlyIGRlcGVuZGVu Y2llcy4gV2UndmUgcmVjZW50bHkgY2hhbmdlZCBob3cNCiAgdGhpcyB3b3JrcyBpbiB0aGUgaW50 ZXJlc3Qgb2YgcG9ydGFiaWxpdHkuDQoNCg0KQmFja2dyb3VuZCBvbiBgZGVwZXh0cycgaW4gT3Bh bQ0K4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM 4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWMDQoNCiAgQSBzeXN0ZW0gcGFj a2FnZSwgb3IgZXh0ZXJuYWwgZGVwZW5kZW5jeSwgb3IgYGRlcGV4dCcgYXMgSSdsbCByZWZlciB0 bw0KICB0aGVtIGZyb20gbm93IG9uLCBpcyBhIG5vbi1PcGFtIHBhY2thZ2Ugd2hpY2ggbXVzdCBi ZSBpbnN0YWxsZWQgaW4NCiAgb3JkZXIgZm9yIHNvbWUgT3BhbSBwYWNrYWdlIHRvIGJlIGJ1aWx0 IG9yIGZvciBjb2RlIGluIGEgcGFja2FnZSB0byBiZQ0KICBleGVjdXRlZCBhdCBydW50aW1lLiBU aGVzZSBwYWNrYWdlcyBtdXN0IGJlIGluc3RhbGxlZCBieSB0aGUgc3lzdGVtDQogIHBhY2thZ2Ug bWFuYWdlciwgb3IgYnkgc29tZSBvdGhlciBub24tT3BhbSBtZWFucyBzdWNoIGFzIG1hbnVhbGx5 DQogIGJ1aWxkaW5nIGFuZCBpbnN0YWxsaW5nIHRoZSBwYWNrYWdlIGZyb20gc291cmNlLiBDb21t b24gdHlwZXMgb2YNCiAgYGRlcGV4dCcgYXJlIGJ1aWxkIHRvb2xzIHN1Y2ggYXMgdGhlIGBwa2ct Y29uZmlnJyBjb21tYW5kLCBvZnRlbiBydW4NCiAgdG8gZGV0ZXJtaW5lIGxpbmtlciBmbGFncyB3 aGlsZSBidWlsZGluZyBhIHBhY2thZ2UsIG9yIHNoYXJlZA0KICBsaWJyYXJpZXMgc3VjaCBhcyBg bGliZ3RrJywgd2hpY2ggYW4gT0NhbWwgcHJvamVjdCBtaWdodCBsaW5rIGFnYWluc3QNCiAgdG8g Y3JlYXRlIEdVSXMuDQoNCiAgT3BhbSB1c3VhbGx5IGluc3RhbGxzIGBkZXBleHRzJyBhdXRvbWF0 aWNhbGx5LiBPcGFtIGtub3dzIGhvdyB0bw0KICBpbnZva2UgbWFueSBkaWZmZXJlbnQgc3lzdGVt IHBhY2thZ2UgbWFuYWdlcnMgKHN1Y2ggYXMgYGFwdCcgb3INCiAgYHBhY21hbicpLCBzbyB3aGVu IGluc3RhbGxpbmcgYSBwYWNrYWdlIHdpdGggYGRlcGV4dHMnIE9wYW0gY2FuIHJ1bg0KICB0aGUg Y29tbWFuZHMgYXBwcm9wcmlhdGUgdG8gdGhlIGN1cnJlbnQgc3lzdGVtIHRvIGluc3RhbGwgdGhl IHJlcXVpcmVkDQogIHBhY2thZ2VzIHVzaW5nIHRoZSBzeXN0ZW0ncyBwYWNrYWdlIG1hbmFnZXIu IEZvciB0aGlzIHRvIHdvcmssIE9wYW0NCiAgbmVlZHMgdG8ga25vdyB0aGUgbmFtZSBvZiB0aGUg cGFja2FnZSB3aXRoaW4gdGhlIHBhY2thZ2UgcmVwb3NpdG9yeQ0KICBhcHByb3ByaWF0ZSB0byB0 aGUgY3VycmVudCBzeXN0ZW0sIGFuZCB0aGVzZSBuYW1lcyBjYW4gdmFyeSBmcm9tDQogIHN5c3Rl bSB0byBzeXN0ZW0uIEZvciBleGFtcGxlIHRoZSBgcGtnLWNvbmZpZycgY29tbWFuZCBpcyBpbiBh IHBhY2thZ2UNCiAgbmFtZWQgc2ltcGx5IGBwa2ctY29uZmlnJyBpbiB0aGUgYGFwdCcgcGFja2Fn ZSBtYW5hZ2VyIG9uDQogIFVidW50dS9EZWJpYW4gc3lzdGVtcywgd2hlcmVhcyBpbiB0aGUgdGhp cmQtcGFydHkgYGhvbWVicmV3JyBwYWNrYWdlDQogIG1hbmFnZXIgb24gTWFjT1MgaXQncyBpbiBh IHBhY2thZ2UgbmFtZWQgYHBrZ2NvbmYnLiBJbiBvcmRlciB0bw0KICBkZXRlcm1pbmUgdGhlIHJp Z2h0IHBhY2thZ2UgbmFtZSBmb3IgdGhlIGN1cnJlbnQgc3lzdGVtLCB0aGUgcGFja2FnZQ0KICBt ZXRhZGF0YSBmb3IgT3BhbSBwYWNrYWdlcyB3aXRoIGBkZXBleHRzJyBjb250YWlucyBhIGxpc3Qg b2YgYWxsIHRoZQ0KICBkaWZmZXJlbnQga25vd24gcGFja2FnZSBuYW1lcyBhbG9uZyB3aXRoIHRo ZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoDQogIHRoYXQgbmFtZSBpcyBjb3JyZWN0LiBIZXJlIGlz IHRoYXQgbGlzdCBmb3IgdGhlIGBjb25mLXBrZy1jb25maWcnIE9wYW0NCiAgcGFja2FnZToNCiAg 4pSM4pSA4pSA4pSA4pSADQogIOKUgiBkZXBleHRzOiBbDQogIOKUgiAgIFsicGtnLWNvbmZpZyJd IHtvcy1mYW1pbHkgPSAiZGViaWFuIiB8IG9zLWZhbWlseSA9ICJ1YnVudHUifQ0KICDilIIgICBb InBrZ2NvbmYiXSB7b3MtZGlzdHJpYnV0aW9uID0gImFyY2gifQ0KICDilIIgICBbInBrZ2NvbmYt cGtnLWNvbmZpZyJdIHtvcy1mYW1pbHkgPSAiZmVkb3JhIn0NCiAg4pSCICAgWyJwa2djb25maWci XSB7b3MtZGlzdHJpYnV0aW9uID0gImNlbnRvcyIgJiBvcy12ZXJzaW9uIDw9ICI3In0NCiAg4pSC ICAgWyJwa2djb25mLXBrZy1jb25maWciXSB7b3MtZGlzdHJpYnV0aW9uID0gIm1hZ2VpYSJ9DQog IOKUgiAgIFsicGtnY29uZmlnIl0ge29zLWRpc3RyaWJ1dGlvbiA9ICJyaGVsIiAmIG9zLXZlcnNp b24gPD0gIjcifQ0KICDilIIgICBbInBrZ2NvbmZpZyJdIHtvcy1kaXN0cmlidXRpb24gPSAib2wi ICYgb3MtdmVyc2lvbiA8PSAiNyJ9DQogIOKUgiAgIFsicGtnY29uZiJdIHtvcy1kaXN0cmlidXRp b24gPSAiYWxwaW5lIn0NCiAg4pSCICAgWyJwa2ctY29uZmlnIl0ge29zLWRpc3RyaWJ1dGlvbiA9 ICJuaXhvcyJ9DQogIOKUgiAgIFsicGtnY29uZiJdIHtvcyA9ICJtYWNvcyIgJiBvcy1kaXN0cmli dXRpb24gPSAiaG9tZWJyZXcifQ0KICDilIIgICBbInBrZ2NvbmZpZyJdIHtvcyA9ICJtYWNvcyIg JiBvcy1kaXN0cmlidXRpb24gPSAibWFjcG9ydHMifQ0KICDilIIgICBbInBrZ2NvbmYiXSB7b3Mg PSAiZnJlZWJzZCJ9DQogIOKUgiAgIFsicGtnY29uZi1wa2ctY29uZmlnIl0ge29zLWRpc3RyaWJ1 dGlvbiA9ICJyaGVsIiAmIG9zLXZlcnNpb24gPj0gIjgifQ0KICDilIIgICBbInBrZ2NvbmYtcGtn LWNvbmZpZyJdIHtvcy1kaXN0cmlidXRpb24gPSAiY2VudG9zIiAmIG9zLXZlcnNpb24gPj0gIjgi fQ0KICDilIIgICBbInBrZ2NvbmYtcGtnLWNvbmZpZyJdIHtvcy1kaXN0cmlidXRpb24gPSAib2wi ICYgb3MtdmVyc2lvbiA+PSAiOCJ9DQogIOKUgiAgIFsic3lzdGVtOnBrZ2NvbmYiXSB7b3MgPSAi d2luMzIiICYgb3MtZGlzdHJpYnV0aW9uID0gImN5Z3dpbnBvcnRzIn0NCiAg4pSCICAgWyJwa2dj b25mIl0ge29zLWRpc3RyaWJ1dGlvbiA9ICJjeWd3aW4ifQ0KICDilIIgXQ0KICDilJTilIDilIDi lIDilIANCg0KDQpgZGVwZXh0cycgaW4gRHVuZQ0K4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM 4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWMDQoNCiAgRHVuZSBkb2Vzbid0IGluc3RhbGwgYGRlcGV4 dHMnIGF1dG9tYXRpY2FsbHkgYXMgdGhlIER1bmUgZGV2ZWxvcGVycw0KICBhcmUgYSBsaXR0bGUg bmVydm91cyBhYm91dCBydW5uaW5nIGNvbW1hbmRzIHRoYXQgd291bGQgbW9kaWZ5IHRoZQ0KICBn bG9iYWwgc3lzdGVtIHN0YXRlLiBUaGlzIG1heSBjaGFuZ2UgYXQgc29tZSBwb2ludCwgYnV0IGZv ciBub3cgRHVuZQ0KICBvbmx5IHByb3ZpZGVzIHN1cHBvcnQgZm9yIGxpc3RpbmcgdGhlIG5hbWVz IG9mIGBkZXBleHRzJywgbGVhdmluZyBpdA0KICB1cCB0byB0aGUgdXNlciB0byBpbnN0YWxsIHRo ZW0gYXMgdGhleSBzZWUgZml0Lg0KDQogIFRoZSBgZHVuZSBzaG93IGRlcGV4dHMnIGNvbW1hbmQg Y2FuIGJlIHVzZWQgdG8gbGlzdCB0aGUgYGRlcGV4dHMnIG9mIGENCiAgcHJvamVjdC4gRm9yIHRo YXQgY29tbWFuZCB0byB3b3JrIHRoZSBwcm9qZWN0IG11c3QgaGF2ZSBhIGxvY2sNCiAgZGlyZWN0 b3J5LiBIZXJlJ3MgYW4gZXhhbXBsZSBvZiBsaXN0aW5nIHRoZSBgZGVwZXh0cycgb2YgYSBwcm9q ZWN0Og0KICDilIzilIDilIDilIDilIANCiAg4pSCICQgZHVuZSBwa2cgbG9jaw0KICDilIIgLi4u DQogIOKUgiAkIGR1bmUgc2hvdyBkZXBleHRzDQogIOKUgiBsaWJhbw0KICDilIIgbGliZmZpDQog IOKUgiBwa2djb25mDQogIOKUgiBzZGwyDQogIOKUlOKUgOKUgOKUgOKUgA0KDQogIEkgcmFuIHRo ZXNlIGNvbW1hbmRzIG9uIGEgTWFjIHdpdGggaG9tZWJyZXcgaW5zdGFsbGVkLCBzbyB0aGUgcGFj a2FnZQ0KICBuYW1lcyBhcmUgZnJvbSB0aGUgaG9tZWJyZXcgcGFja2FnZSByZXBvLiBFYWNoIHBh Y2thZ2UgbGlzdGVkIHRoZXJlIGlzDQogIG9uZSBvZiB0aGUgYGRlcGV4dHMnIG9mIGEgcGFja2Fn ZSB3aG9zZSBsb2NrZmlsZSBhcHBlYXJzIGluIHRoZQ0KICBwcm9qZWN0J3MgbG9jayBkaXJlY3Rv cnkuIExldCdzIGxvb2sgYXQgaG93IHRoaXMgaW5mb3JtYXRpb24gaXMNCiAgc3RvcmVkLiBVc2lu ZyBgcGtnLWNvbmZpZycgYXMgYW4gZXhhbXBsZToNCiAg4pSM4pSA4pSA4pSA4pSADQogIOKUgiAk IGNhdCBkdW5lLmxvY2svY29uZi1wa2ctY29uZmlnLnBrZw0KICDilIIgKHZlcnNpb24gNCkNCiAg 4pSCIA0KICDilIIgKGJ1aWxkDQogIOKUgiAgKHJ1biBwa2djb25mIC0tdmVyc2lvbikpDQogIOKU giANCiAg4pSCIChkZXBleHRzIHBrZ2NvbmYpDQogIOKUlOKUgOKUgOKUgOKUgA0KDQogIFRoZSBy ZWxldmFudCBwYXJ0IGZvciB1cyBpcyB0aGUgYGRlcGV4dHMnIGZpZWxkLiBUaGUgY3VycmVudCBy ZWxlYXNlZA0KICB2ZXJzaW9uIG9mIER1bmUgb25seSBzdG9yZXMgdGhlIHBhY2thZ2UncyBgZGVw ZXh0cycgZm9yIHRoZSBzeXN0ZW0NCiAgd2hlcmUgYGR1bmUgcGtnIGxvY2snIHdhcyBydW4uIFRo ZSBjb21tYW5kIGBkdW5lIHNob3cgZGVwZXh0cycgc2ltcGx5DQogIGNvbmNhdGVuYXRlcyB0aGUg YGRlcGV4dHMnIGZpZWxkcyBmcm9tIGVhY2ggbG9ja2ZpbGUgaW4gdGhlIGxvY2sNCiAgZGlyZWN0 b3J5Lg0KDQogIFdoZW4gdGhpbmtpbmcgYWJvdXQgcG9ydGFibGUgbG9jayBkaXJlY3RvcmllcyBJ IGFsd2F5cyBsaWtlIHRvIGltYWdpbmUNCiAgd2hhdCB0aGUgZXhwZXJpZW5jZSB3b3VsZCBiZSB1 c2luZyBEdW5lIGZvciBhIHByb2plY3Qgd2hlcmUgdGhlIGxvY2sNCiAgZGlyZWN0b3J5IGlzIGNo ZWNrZWQgaW50byB2ZXJzaW9uIGNvbnRyb2wuIEkgZnJlcXVlbnRseSBzd2l0Y2ggYmV0d2Vlbg0K ICB1c2luZyB0d28gZGlmZmVyZW50IG1hY2hpbmVzIGZvciBkZXZlbG9wbWVudCAtIG9uZSBydW5u aW5nIExpbnV4IGFuZA0KICB0aGUgb3RoZXIgcnVubmluZyBNYWNPUy4gSWYgSSB3YXMgdG8gY2hl Y2sgaW4gdGhlIGxvY2sgZGlyZWN0b3J5IEkNCiAganVzdCBnZW5lcmF0ZWQgb24gbXkgTWFjLCBh bmQgdGhlbiBjaGVjayBpdCBvdXQgb24gTGludXggYW5kIGNvbnRpbnVlDQogIGRldmVsb3BtZW50 LCBgZHVuZSBzaG93IGRlcGV4dHMnIHdvdWxkIHNob3cgbWUgYSBsaXN0IG9mIHBhY2thZ2VzIGZv cg0KICB0aGUgd3Jvbmcgc3lzdGVtIQ0KDQoNClBvcnRhYmxlIGBkZXBleHRzJyBpbiBEdW5lDQri lYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzi lYzilYzilYzilYzilYzilYzilYwNCg0KICBUbyBtYWtlIGBkZXBleHRzJyBwb3J0YWJsZSwgb25l J3MgZmlyc3QgaW5zdGluY3QgbWlnaHQgYmUgdG8gdXNlIHRoZQ0KICBzYW1lIGFwcHJvYWNoIGFz IHRha2VuIHdpdGggdGhlIGBkZXBlbmRzJyBmaWVsZCBvdXRsaW5lZCBbaGVyZV0sDQogIGxpc3Rp bmcgdGhlIGBkZXBleHRzJyBmb3IgZWFjaCBwbGF0Zm9ybSBmb3Igd2hpY2ggdGhlIHNvbHZlciB3 YXMNCiAgcnVuLiBJbmRlZWQgc3VjaCBhIGNoYW5nZSB3YXMgYWRkZWQgdG8gdGhlIER1bmUgRGV2 ZWxvcGVyIFByZXZpZXcgd2hlbg0KICB3ZSBmaXJzdCBpbnRyb2R1Y2VkIHBvcnRhYmxlIGxvY2sg ZGlyZWN0b3JpZXMsIGhvd2V2ZXIgd2UgcXVpY2tseQ0KICByZWFsaXplZCBhIHByb2JsZW0uDQoN CiAgVGhlIGBkZXBlbmRzJywgYGJ1aWxkJywgYW5kIGBpbnN0YWxsJyBmaWVsZHMgb2YgYSBwYWNr YWdlIHJhcmVseSB2YXJ5DQogIGJldHdlZW4gT1MgZGlzdHJpYnV0aW9uLiBJdCdzIHJlYXNvbmFi bHkgY29tbW9uIGZvciB0aG9zZSBmaWVsZHMgdG8gYmUNCiAgZGlmZmVyZW50IG9uIGRpZmZlcmVu dCBPU2VzLCBidXQgdmVyeSByYXJlIGZvciB0aGVtIHRvIGFsc28gYmUNCiAgZGlmZmVyZW50IG9u IGRpZmZlcmVudCBPUyBfZGlzdHJpYnV0aW9uc18uIEFzIHN1Y2gsIGl0J3MgZXhwZWN0ZWQgdGhh dA0KICB1c2VycyB3aWxsIGVsZWN0IHRvIHNvbHZlIHRoZWlyIHByb2plY3RzIGZvciBlYWNoIGNv bW1vbiBPUywgYnV0IHRoZXJlDQogIHdvdWxkIGJlIGxpdHRsZSB2YWx1ZSBpbiBzb2x2aW5nIHBy b2plY3RzIGZvciBlYWNoIE9TIGRpc3Ryby4gSW4gZmFjdA0KICBzb2x2aW5nIGZvciBtdWx0aXBs ZSBkaXN0cm9zIHdvdWxkIHNsb3cgZG93biBzb2x2aW5nIGFuZCBibG9hdCB0aGUNCiAgbG9jayBk aXJlY3RvcnksIGFuZCB1c2VycyB3b3VsZCBzb21laG93IG5lZWQgdG8gY29tZSB1cCB3aXRoIGEN CiAgZGVmaW5pdGl2ZSBsaXN0IG9mIGRpc3Ryb3MgdG8gc29sdmUgZm9yLg0KDQogIF9CdXRfIHRo ZSBgZGVwZXh0cycgZmllbGQgaXMgaGlnaGx5LWRlcGVuZGVudCBvbiB0aGUgT1MgZGlzdHJvIHNp bmNlDQogIHBhY2thZ2UgbmFtZXMgYXJlIHNwZWNpZmljIHRvIHRoZSBwYWNrYWdlIHJlcG9zaXRv cnkgZm9yIGEgcGFydGljdWxhcg0KICBkaXN0cm8uIFJlY2FsbCB0aGF0IHRoZSBgZGVwZXh0cycg ZmllbGQgaW4gT3BhbSBwYWNrYWdlIG1ldGFkYXRhIGxpc3RzDQogIHBhY2thZ2UgbmFtZXMgYWxv bmcgd2l0aCB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCB0aGF0IHBhY2thZ2UgbmFtZQ0KICBz aG91bGQgYmUgdXNlZCwgZS5nLjoNCiAg4pSM4pSA4pSA4pSA4pSADQogIOKUgiBbInBrZy1jb25m aWciXSB7b3MtZmFtaWx5ID0gImRlYmlhbiIgfCBvcy1mYW1pbHkgPSAidWJ1bnR1In0NCiAg4pSC IFsicGtnY29uZiJdIHtvcy1kaXN0cmlidXRpb24gPSAiYXJjaCJ9DQogIOKUgiBbInBrZ2NvbmYt cGtnLWNvbmZpZyJdIHtvcy1mYW1pbHkgPSAiZmVkb3JhIn0NCiAg4pSCIFsicGtnY29uZmlnIl0g e29zLWRpc3RyaWJ1dGlvbiA9ICJjZW50b3MiICYgb3MtdmVyc2lvbiA8PSAiNyJ9DQogIOKUlOKU gOKUgOKUgOKUgA0KICBUaGVzZSBjb25kaXRpb25zIGFsbW9zdCBhbHdheXMgaW52b2x2ZSB0aGUg bmFtZSBvZiB0aGUgT1MgZGlzdHJvLCBhbmQNCiAgdG8gbWFrZSBtYXR0ZXJzIHdvcnNlIHRoZXkg YWxzbyBzb21ldGltZXMgaW52b2x2ZSB0aGUgT1MgX3ZlcnNpb25fLCBhcw0KICBwYWNrYWdlcyBj YW4gY2hhbmdlIHRoZWlyIG5hbWVzIGJldHdlZW4gZGlmZmVyZW50IHZlcnNpb25zIG9mIHRoZSBz YW1lDQogIE9TLiBFdmFsdWF0aW5nIHRoZXNlIGNvbmRpdGlvbnMgYXQgc29sdmUgdGltZSBmb3Ig cGxhdGZvcm1zIHdpdGggbm8NCiAgZGlzdHJvIG9yIHZlcnNpb24gc3BlY2lmaWVkIHRlbmRzIHRv IHJlc3VsdCBpbiBsb2NrZmlsZXMgd2l0aCBfbm9fDQogIGBkZXBleHRzJyBhdCBhbGwsIHNpbmNl IGFsbCB0aGUgY29uZGl0aW9ucyBldmFsdWF0ZSB0byBgZmFsc2UnLg0KDQogIFRoZSB1c2UgY2Fz ZSB3ZSBoYXZlIGluIG1pbmQgZm9yIGBkZXBleHRzJyBpbiBEdW5lIGlzIHRoYXQgYSB1c2VyIHdp bGwNCiAgc29sdmUgdGhlaXIgcHJvamVjdCBjb2Fyc2VseSwgdXN1YWxseSBqdXN0IGZvciBlYWNo IGNvbW1vbiBPUyB3aXRoIG5vDQogIGNvbnNpZGVyYXRpb24gZm9yIGRpc3RyaWJ1dGlvbiBvciB2 ZXJzaW9uLiBUaGVuIHdoZW4gdGhleSBydW4gYGR1bmUNCiAgc2hvdyBkZXBleHRzJywgdGhlIGBk ZXBleHRzJyB3aWxsIGJlIGxpc3RlZCB1c2luZyBuYW1lcyBhcHByb3ByaWF0ZSB0bw0KICB0aGUg Y3VycmVudCBtYWNoaW5lLiBUaGlzIG1lYW5zIER1bmUgbmVlZHMgdG8gc3RvcmUgZW5vdWdoIG1l dGFkYXRhDQogIGFib3V0IGBkZXBleHRzJyB0byBjb21wdXRlIHN5c3RlbS1zcGVjaWZpYyBgZGVw ZXh0JyBuYW1lcyBhdCBhIGxhdGVyDQogIHRpbWUuIFRoaXMgbWVhbnMgc3RvcmluZyB0aGUgc2Ft ZSBuYW1lcyBhbmQgY29uZGl0aW9ucyBhcyBhcmUNCiAgY3VycmVudGx5IHN0b3JlZCBpbiBPcGFt IGZpbGVzLCBhbmQgZGVmZXJyaW5nIGV2YWx1YXRpb24gb2YgdGhlDQogIGNvbmRpdGlvbnMgdW50 aWwgYXMgbGF0ZSBhcyBwb3NzaWJsZSwgc3VjaCBhcyByaWdodCB3aGVuIGBkdW5lIHNob3cNCiAg ZGVwZXh0cycgaXMgcnVuLg0KDQogIFRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGUgRHVuZSBEZXZl bG9wZXIgUHJldmlldyBkb2VzIGp1c3QgdGhpczsNCiAgdHJhbnNsYXRpbmcgdGhlIGBkZXBleHRz JyBmaWVsZCBmcm9tIGVhY2ggcGFja2FnZSdzIE9wYW0gZmlsZSBpbnRvIGENCiAgRHVuZS1mcmll bmRseSBTLWV4cHJlc3Npb24uIEFmdGVyIHRoaXMgY2hhbmdlLCB0aGUgYGRlcGV4dHMnIGZpZWxk IG9mDQogIGBjb25mLXBrZy1jb25maWcnJ3MgbG9ja2ZpbGUgaXM6DQogIOKUjOKUgOKUgOKUgOKU gA0KICDilIIgJCBjYXQgZHVuZS5sb2NrL2NvbmYtcGtnLWNvbmZpZy40LnBrZw0KICDilIIgLi4u DQogIOKUgiAoZGVwZXh0cw0KICDilIIgICgocGtnLWNvbmZpZykNCiAg4pSCICAgKG9yX2Fic29y Yl91bmRlZmluZWRfdmFyDQogIOKUgiAgICAoPSAle29zX2ZhbWlseX0gZGViaWFuKQ0KICDilIIg ICAgKD0gJXtvc19mYW1pbHl9IHVidW50dSkpKQ0KICDilIIgICgocGtnY29uZikNCiAg4pSCICAg KD0gJXtvc19kaXN0cmlidXRpb259IGFyY2gpKQ0KICDilIIgICgocGtnY29uZi1wa2ctY29uZmln KQ0KICDilIIgICAoPSAle29zX2ZhbWlseX0gZmVkb3JhKSkNCiAg4pSCICAoKHBrZ2NvbmZpZykN CiAg4pSCICAgKGFuZF9hYnNvcmJfdW5kZWZpbmVkX3Zhcg0KICDilIIgICAgKD0gJXtvc19kaXN0 cmlidXRpb259IGNlbnRvcykNCiAg4pSCICAgICg8PSAle29zX3ZlcnNpb259IDcpKSkNCiAg4pSC ICAoKHBrZ2NvbmYtcGtnLWNvbmZpZykNCiAg4pSCICAgKD0gJXtvc19kaXN0cmlidXRpb259IG1h Z2VpYSkpDQogIOKUgiAgKChwa2djb25maWcpDQogIOKUgiAgIChhbmRfYWJzb3JiX3VuZGVmaW5l ZF92YXINCiAg4pSCICAgICg9ICV7b3NfZGlzdHJpYnV0aW9ufSByaGVsKQ0KICDilIIgICAgKDw9 ICV7b3NfdmVyc2lvbn0gNykpKQ0KICDilIIgICgocGtnY29uZmlnKQ0KICDilIIgICAoYW5kX2Fi c29yYl91bmRlZmluZWRfdmFyDQogIOKUgiAgICAoPSAle29zX2Rpc3RyaWJ1dGlvbn0gb2wpDQog IOKUgiAgICAoPD0gJXtvc192ZXJzaW9ufSA3KSkpDQogIOKUgiAgKChwa2djb25mKQ0KICDilIIg ICAoPSAle29zX2Rpc3RyaWJ1dGlvbn0gYWxwaW5lKSkNCiAg4pSCICAoKHBrZy1jb25maWcpDQog IOKUgiAgICg9ICV7b3NfZGlzdHJpYnV0aW9ufSBuaXhvcykpDQogIOKUgiAgKChwa2djb25mKQ0K ICDilIIgICAoYW5kX2Fic29yYl91bmRlZmluZWRfdmFyDQogIOKUgiAgICAoPSAle29zfSBtYWNv cykNCiAg4pSCICAgICg9ICV7b3NfZGlzdHJpYnV0aW9ufSBob21lYnJldykpKQ0KICDilIIgICgo cGtnY29uZmlnKQ0KICDilIIgICAoYW5kX2Fic29yYl91bmRlZmluZWRfdmFyDQogIOKUgiAgICAo PSAle29zfSBtYWNvcykNCiAg4pSCICAgICg9ICV7b3NfZGlzdHJpYnV0aW9ufSBtYWNwb3J0cykp KQ0KICDilIIgICgocGtnY29uZikNCiAg4pSCICAgKD0gJXtvc30gZnJlZWJzZCkpDQogIOKUgiAg KChwa2djb25mLXBrZy1jb25maWcpDQogIOKUgiAgIChhbmRfYWJzb3JiX3VuZGVmaW5lZF92YXIN CiAg4pSCICAgICg9ICV7b3NfZGlzdHJpYnV0aW9ufSByaGVsKQ0KICDilIIgICAgKD49ICV7b3Nf dmVyc2lvbn0gOCkpKQ0KICDilIIgICgocGtnY29uZi1wa2ctY29uZmlnKQ0KICDilIIgICAoYW5k X2Fic29yYl91bmRlZmluZWRfdmFyDQogIOKUgiAgICAoPSAle29zX2Rpc3RyaWJ1dGlvbn0gY2Vu dG9zKQ0KICDilIIgICAgKD49ICV7b3NfdmVyc2lvbn0gOCkpKQ0KICDilIIgICgocGtnY29uZi1w a2ctY29uZmlnKQ0KICDilIIgICAoYW5kX2Fic29yYl91bmRlZmluZWRfdmFyDQogIOKUgiAgICAo PSAle29zX2Rpc3RyaWJ1dGlvbn0gb2wpDQogIOKUgiAgICAoPj0gJXtvc192ZXJzaW9ufSA4KSkp DQogIOKUgiAgKChzeXN0ZW06cGtnY29uZikNCiAg4pSCICAgKGFuZF9hYnNvcmJfdW5kZWZpbmVk X3Zhcg0KICDilIIgICAgKD0gJXtvc30gd2luMzIpDQogIOKUgiAgICAoPSAle29zX2Rpc3RyaWJ1 dGlvbn0gY3lnd2lucG9ydHMpKSkNCiAg4pSCICAoKHBrZ2NvbmYpDQogIOKUgiAgICg9ICV7b3Nf ZGlzdHJpYnV0aW9ufSBjeWd3aW4pKSkNCiAg4pSU4pSA4pSA4pSA4pSADQoNCiAgVGhhdCdzIGEg MToxIHRyYW5zbGF0aW9uIG9mIHRoZSBgZGVwZXh0cycgZmllbGQgZnJvbQ0KICBgY29uZi1wa2ct Y29uZmlnJydzIE9wYW0gZmlsZS4gVGhlcmUncyBlbm91Z2ggaW5mb3JtYXRpb24gdGhlcmUgc28N CiAgdGhhdCB0aGUgYXBwcm9wcmlhdGUgcGFja2FnZSBuYW1lIGNhbiBiZSBjb21wdXRlZCBvbiBk ZW1hbmQgcmF0aGVyDQogIHRoYW4ganVzdCBhdCBzb2x2ZSB0aW1lLg0KDQogIFRoaXMgYnJpbmcg dXMgYSBzdGVwIGNsb3NlciB0byBhIHdvcmxkIHdoZXJlIER1bmUgdXNlcnMgY2FuIGNoZWNrDQog IHRoZWlyIGxvY2sgZGlyZWN0b3JpZXMgaW50byB2ZXJzaW9uIGNvbnRyb2wgd2l0aCBjb25maWRl bmNlIHRoYXQgdGhlaXINCiAgYnVpbGRzIGFyZSByZXByb2R1Y2libGUgYWNyb3NzIGRpZmZlcmVu dCBwbGF0Zm9ybXMuIFRvIHRyeSBvdXQgdGhlDQogIGxhdGVzdCB2ZXJzaW9uIG9mIHRoZSBEdW5l IERldmVsb3BlciBQcmV2aWV3LCBnbyB0bw0KICBbcHJldmlldy5kdW5lLmJ1aWxkXS4NCg0KDQpb aGVyZV0NCjxodHRwczovL29jYW1sLm9yZy9jaGFuZ2Vsb2cvMjAyNS0wNS0xOS1wb3J0YWJsZS1s b2NrLWRpcmVjdG9yaWVzLWZvci1kdW5lLXBhY2thZ2UtbWFuYWdlbWVudD4NCg0KW3ByZXZpZXcu ZHVuZS5idWlsZF0gPGh0dHBzOi8vcHJldmlldy5kdW5lLmJ1aWxkLz4NCg0KDQpTZW1ncmVwIGlz IGhpcmluZyBPQ2FtbCBkZXZlbG9wZXJzIHRvIHdvcmsgb24gdGhlIHN0YXRpYyBhbmFseXNpcyBl bmdpbmUNCuKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkA0KDQog IEFyY2hpdmU6DQogIDxodHRwczovL2Rpc2N1c3Mub2NhbWwub3JnL3Qvam9iLXJlbW90ZS1zZW1n cmVwLWlzLWhpcmluZy1vY2FtbC1kZXZlbG9wZXJzLXRvLXdvcmstb24tdGhlLXN0YXRpYy1hbmFs eXNpcy1lbmdpbmUvMTY3NzEvMT4NCg0KDQppYWdvIGFubm91bmNlZA0K4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSADQoNCiAgU2VtZ3JlcCBpcyBhbiBhcHBsaWNhdGlv biBzZWN1cml0eSBjb21wYW55IGZvY3VzZWQgb24gZGV0ZWN0aW5nIGFuZA0KICByZW1lZGlhdGlu ZyB2dWxuZXJhYmlsaXRpZXMuIFRoZSBzdGF0aWMgYW5hbHlzaXMgZW5naW5lIGlzIHByaW1hcmls eQ0KICB3cml0dGVuIGluIE9DYW1sLiBXZSBhcmUgbG9va2luZyBmb3IgYSBzZW5pb3Igc29mdHdh cmUgZW5naW5lZXIgdG8NCiAgam9pbiB0aGUgQ29kZSB0ZWFtLCB3aGVyZSB3ZSBmb2N1cyBvbiBm aXJzdC1wYXJ0eSBjb2RlIHZ1bG5lcmFiaWxpdHkNCiAgYW5kIHNlY3JldHMgc2Nhbm5pbmcuDQoN CiAgVGhlIGlkZWFsIGNhbmRpZGF0ZSBoYXMgZXhwZXJpZW5jZSBidWlsZGluZyBwcm9ncmFtIGFu YWx5c2lzIHRvb2xpbmcNCiAgb3IgY29kZSBzY2FubmVycyAocGVyaGFwcyBpbiBhIHJlc2VhcmNo IGNvbnRleHQpLg0KDQogIEJvdGggb24tc2l0ZSBhbmQgcmVtb3RlIHdvcmsgYXJlIE9LLg0KDQog IElmIHRoaXMgc291bmRzIGludGVyZXN0aW5nIHRvIHlvdSwgc2VlIG91ciBqb2IgcG9zdGluZyBh dCBbU2VuaW9yDQogIFByb2dyYW0gQW5hbHlzaXMgRW5naW5lZXIsIENvZGVdLg0KDQogIExldCBt ZSBrbm93IGlmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMhDQoNCg0KW1NlbmlvciBQcm9ncmFtIEFu YWx5c2lzIEVuZ2luZWVyLCBDb2RlXQ0KPGh0dHBzOi8vam9iLWJvYXJkcy5ncmVlbmhvdXNlLmlv L3NlbWdyZXAvam9icy80NzUyMzYxMDA3Pg0KDQoNCkVscGUsIGEgY29uZmlnLWFzLWNvZGUgYnVp bGQgc3lzdGVtIHdyaXR0ZW4gaW4gT0NhbWwrUnVzdA0K4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQDQoNCiAgQXJjaGl2ZToNCiAgPGh0dHBz Oi8vZGlzY3Vzcy5vY2FtbC5vcmcvdC9lbHBlLWEtY29uZmlnLWFzLWNvZGUtYnVpbGQtc3lzdGVt LXdyaXR0ZW4taW4tb2NhbWwtcnVzdC8xNjc4My8xPg0KDQoNCnBtZXVuaWVyIGFubm91bmNlZA0K 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSADQoN CiAgSSBqdXN0IHJlbGVhc2VkIHRoZSBmaXJzdCB2ZXJzaW9uIG9mIEVscGUsIGEgYnVpbGQgc3lz dGVtIGRlc2lnbmVkIGFzDQogIGEgYmxlbmQgb2YgTml4IGFuZCBVYnVudHUuDQoNCiAgSXQgdXNl cyBPQ2FtbCBmb3IgdGhlIGZyb250ZW5kLCBhbmQgY29tbXVuaWNhdGVzIHdpdGggYSBSdXN0IGJh Y2tlbmQNCiAgdmlhIGdSUEMuDQoNCiAgW0Jsb2cgcG9zdCBhYm91dCBpdF0NCg0KDQpbQmxvZyBw b3N0IGFib3V0IGl0XSA8aHR0cHM6Ly9waWp1bC5vcmcvcG9zdHMvMjAyNS0wNi0wOC1lbHBlPg0K DQoNCkR1bmUgZGV2IG1lZXRpbmcNCuKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkA0KDQogIEFyY2hpdmU6IDxodHRwczovL2Rpc2N1c3Mub2NhbWwub3JnL3Qv YW5uLWR1bmUtZGV2LW1lZXRpbmcvMTQ5OTQvMzE+DQoNCg0KRXRpZW5uZSBNYXJhaXMgYW5ub3Vu Y2VkDQrilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIANCg0KICBIZWxsbyA6dnVsY2FuX3NhbHV0ZTogVGhlIG5leHQg RHVuZSBEZXYgTWVldGluZyB3aWxsIGJlIHRvbW9ycm93IG9uDQogICpXZWRuZXNkYXksIEp1bmUs IDExdGggYXQgMTY6MDAgQ0VTVCouIFRoaXMgaXMgZ29pbmcgdG8gYmUgYQ0KICBvbmUtaG91ci1s b25nIG1lZXRpbmcuDQoNCiAgV2hldGhlciB5b3UgYXJlIGEgbWFpbnRhaW5lciwgYSByZWd1bGFy IGNvbnRyaWJ1dG9yLCBhIG5ldyBqb2luZXIgb3INCiAganVzdCBjdXJpb3VzLCB5b3UgYXJlIHdl bGNvbWUgdG8gam9pbjogdGhlc2UgZGlzY3Vzc2lvbnMgYXJlIG9wZW5lZCENCiAgVGhlIGdvYWwg b2YgdGhlc2UgbWVldGluZ3MgaXMgdG8gcHJvdmlkZSBhIHBsYWNlIHRvIGRpc2N1c3MgdGhlDQog IG9uZ29pbmcgd29yayB0b2dldGhlciBhbmQgc3luY2hyb25pemUgd2l0aCB0aGUgRHVuZSBkZXZl bG9wZXJzIDorMToNCg0KICBUaGUgYWdlbmRhIGlzIGF2YWlsYWJsZSBvbiB0aGUgW21lZXRpbmcg ZGVkaWNhdGVkIHBhZ2VdLiBGZWVsIGZyZWUgdG8NCiAgYWRkIG1vcmUgaXRlbXMgaW4gaXQuDQoN CiAg4oCiIE1lZXRpbmcgbGluazogW3pvb21dDQogIOKAoiBDYWxlbmRhciBldmVudDogW2dvb2ds ZSBjYWxlbmRhcl0NCiAg4oCiIFdpa2kgd2l0aCBpbmZvcm1hdGlvbiBhbmQgcHJldmlvdXMgbm90 ZXM6IFtkdW5lIHdpa2kgb24gR2l0SHViXQ0KDQoNClttZWV0aW5nIGRlZGljYXRlZCBwYWdlXQ0K PGh0dHBzOi8vZ2l0aHViLmNvbS9vY2FtbC9kdW5lL3dpa2kvZGV2LW1lZXRpbmctMjAyNS0wNi0x MT4NCg0KW3pvb21dDQo8aHR0cHM6Ly91czA2d2ViLnpvb20udXMvai84NTA5Njg3Nzc3Nj9wd2Q9 Y1dOaFUxZEhRMVpOU2padU9VWkNRMGgyYnk5VWR6MDk+DQoNCltnb29nbGUgY2FsZW5kYXJdDQo8 aHR0cHM6Ly9jYWxlbmRhci5nb29nbGUuY29tL2NhbGVuZGFyL3UvMC9lbWJlZD9zcmM9Y181Y2Q2 OThkZjY3ODRlMzg1YjFjZGNkYzFkYmNhMThjMDYxZmFhOTY5NTlhMDQ3ODE1NjZkMzA0ZGM5ZWM3 MzE5QGdyb3VwLmNhbGVuZGFyLmdvb2dsZS5jb20+DQoNCltkdW5lIHdpa2kgb24gR2l0SHViXSA8 aHR0cHM6Ly9naXRodWIuY29tL29jYW1sL2R1bmUvd2lraT4NCg0KDQpPdGhlciBPQ2FtbCBOZXdz DQrilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZANCg0KRnJv bSB0aGUgb2NhbWwub3JnIGJsb2cNCuKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgA0KDQogIEhlcmUgYXJlIGxpbmtzIGZy b20gbWFueSBPQ2FtbCBibG9ncyBhZ2dyZWdhdGVkIGF0IFt0aGUgb2NhbWwub3JnDQogIGJsb2dd Lg0KDQogIOKAoiBbT3BhbSBIZWFsdGggQ2hlY2s6IG9yIEhvdyB3ZSBHb3QgdG8gOTArJSBvZiBQ YWNrYWdlcyBCdWlsZGluZyB3aXRoDQogICAgRHVuZSBQYWNrYWdlIE1hbmFnZW1lbnRdDQogIOKA oiBbUGVlci1Qcm9ncmFtbWluZyBpbiBNb2Rlcm4gT0NhbWwgd2l0aCBDaGF0R1BUIGFuZCBHZW1p bmldDQogIOKAoiBbQ0VPUyBQcm9qZWN0IEtpY2stT2ZmOiBVc2luZyBTYXRlbGxpdGVzIHRvIFN1 cnZleSB0aGUgRWFydGhdDQogIOKAoiBbUHJvZ3Jlc3MgaW4gT0NhbWwgZG9jc10NCiAg4oCiIFtU aGUgd2VlayB0aGF0IHdhcyAtIDIwMjUgdzIxXQ0KICDigKIgW0J1aWxkIE1lZXR1cCAtIEphbmUg U3RyZWV0IExvbmRvbl0NCg0KDQpbdGhlIG9jYW1sLm9yZyBibG9nXSA8aHR0cHM6Ly9vY2FtbC5v cmcvYmxvZy8+DQoNCltPcGFtIEhlYWx0aCBDaGVjazogb3IgSG93IHdlIEdvdCB0byA5MCslIG9m IFBhY2thZ2VzIEJ1aWxkaW5nIHdpdGggRHVuZQ0KUGFja2FnZSBNYW5hZ2VtZW50XQ0KPGh0dHBz Oi8vdGFyaWRlcy5jb20vYmxvZy8yMDI1LTA2LTA1LW9wYW0taGVhbHRoLWNoZWNrLW9yLWhvdy13 ZS1nb3QtdG8tOTAtb2YtcGFja2FnZXMtYnVpbGRpbmctd2l0aC1kdW5lLXBhY2thZ2UtbWFuYWdl bWVudD4NCg0KW1BlZXItUHJvZ3JhbW1pbmcgaW4gTW9kZXJuIE9DYW1sIHdpdGggQ2hhdEdQVCBh bmQgR2VtaW5pXQ0KPGh0dHBzOi8vc29hcC5jb2ZmZWUvfmx0aG1zL3Bvc3RzL1BlZXJQcm9ncmFt bWluZ1dpdGhMTE1zLmh0bWw+DQoNCltDRU9TIFByb2plY3QgS2ljay1PZmY6IFVzaW5nIFNhdGVs bGl0ZXMgdG8gU3VydmV5IHRoZSBFYXJ0aF0NCjxodHRwczovL3RhcmlkZXMuY29tL2Jsb2cvMjAy NS0wNS0zMC1jZW9zLXByb2plY3Qta2ljay1vZmYtdXNpbmctc2F0ZWxsaXRlcy10by1zdXJ2ZXkt dGhlLWVhcnRoPg0KDQpbUHJvZ3Jlc3MgaW4gT0NhbWwgZG9jc10NCjxodHRwczovL2pvbi5yZWNv aWwub3JnL2Jsb2cvMjAyNS8wNS9kb2NzLXByb2dyZXNzLmh0bWw+DQoNCltUaGUgd2VlayB0aGF0 IHdhcyAtIDIwMjUgdzIxXQ0KPGh0dHBzOi8vd3d3LmRyYTI3LnVrL2Jsb2cvd2Vlay10aGF0LXdh cy8yMDI1LzA1LzI0L3d0dy0yMS5odG1sPg0KDQpbQnVpbGQgTWVldHVwIC0gSmFuZSBTdHJlZXQg TG9uZG9uXQ0KPGh0dHBzOi8vd3d3LmRyYTI3LnVrL2Jsb2cvbWlzYy8yMDI1LzA1LzIzL2J1aWxk LWV2ZW50Lmh0bWw+DQoNCg0KT2xkIENXTg0K4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQDQoNCiAgSWYg eW91IGhhcHBlbiB0byBtaXNzIGEgQ1dOLCB5b3UgY2FuIFtzZW5kIG1lIGEgbWVzc2FnZV0gYW5k IEknbGwgbWFpbA0KICBpdCB0byB5b3UsIG9yIGdvIHRha2UgYSBsb29rIGF0IFt0aGUgYXJjaGl2 ZV0gb3IgdGhlIFtSU1MgZmVlZCBvZiB0aGUNCiAgYXJjaGl2ZXNdLg0KDQogIElmIHlvdSBhbHNv IHdpc2ggdG8gcmVjZWl2ZSBpdCBldmVyeSB3ZWVrIGJ5IG1haWwsIHlvdSBtYXkgc3Vic2NyaWJl DQogIHRvIHRoZSBbY2FtbC1saXN0XS4NCg0KICBbQWxhbiBTY2htaXR0XQ0KDQoNCltzZW5kIG1l IGEgbWVzc2FnZV0gPG1haWx0bzphbGFuLnNjaG1pdHRAcG9seXRlY2huaXF1ZS5vcmc+DQoNClt0 aGUgYXJjaGl2ZV0gPGh0dHBzOi8vYWxhbi5wZXRpdGVwb21tZS5uZXQvY3duLz4NCg0KW1JTUyBm ZWVkIG9mIHRoZSBhcmNoaXZlc10gPGh0dHBzOi8vYWxhbi5wZXRpdGVwb21tZS5uZXQvY3duL2N3 bi5yc3M+DQoNCltjYW1sLWxpc3RdIDxodHRwczovL3N5bXBhLmlucmlhLmZyL3N5bXBhL2luZm8v Y2FtbC1saXN0Pg0KDQpbQWxhbiBTY2htaXR0XSA8aHR0cHM6Ly9hbGFuLnBldGl0ZXBvbW1lLm5l dC8+DQoNCg== --=-=-= Content-Type: text/html Content-Disposition: inline Content-Transfer-Encoding: quoted-printable OCaml Weekly News

OCaml Weekly News

Previous Week<= /a> Up Next Week

Hello

Here is the latest OCaml Weekly News, for the week of June 03 to 10, 2025.

Portable External Dependencies for Dune Package Management

Steve Sherratt announced

Dune lock directories record the names of any system packages needed to bui= ld projects or their dependencies. We've recently changed how this works in= the interest of portability.

Background on depexts in Opam

A system package, or external dependency, or depext as I'll re= fer to them from now on, is a non-Opam package which must be installed in o= rder for some Opam package to be built or for code in a package to be execu= ted at runtime. These packages must be installed by the system package mana= ger, or by some other non-Opam means such as manually building and installi= ng the package from source. Common types of depext are build t= ools such as the pkg-config command, often run to determine li= nker flags while building a package, or shared libraries such as libg= tk, which an OCaml project might link against to create GUIs.

Opam usually installs depexts automatically. Opam knows how to= invoke many different system package managers (such as apt or= pacman), so when installing a package with depexts Opam can run the commands appropriate to the current system to install t= he required packages using the system's package manager. For this to work, = Opam needs to know the name of the package within the package repository ap= propriate to the current system, and these names can vary from system to sy= stem. For example the pkg-config command is in a package named= simply pkg-config in the apt package manager on = Ubuntu/Debian systems, whereas in the third-party homebrew pac= kage manager on MacOS it's in a package named pkgconf. In orde= r to determine the right package name for the current system, the package m= etadata for Opam packages with depexts contains a list of all = the different known package names along with the conditions under which tha= t name is correct. Here is that list for the conf-pkg-config O= pam package:

depexts: [
  ["pkg-config"] {os-family =3D "debian" | os-family =3D "ubuntu"}
  ["pkgconf"] {os-distribution =3D "arch"}
  ["pkgconf-pkg-config"] {os-family =3D "fedora"}
  ["pkgconfig"] {os-distribution =3D "centos" & os-version <=3D "7"}
  ["pkgconf-pkg-config"] {os-distribution =3D "mageia"}
  ["pkgconfig"] {os-distribution =3D "rhel" & os-version <=3D "7"}
  ["pkgconfig"] {os-distribution =3D "ol" & os-version <=3D "7"}
  ["pkgconf"] {os-distribution =3D "alpine"}
  ["pkg-config"] {os-distribution =3D "nixos"}
  ["pkgconf"] {os =3D "macos" & os-distribution =3D "homebrew"}
  ["pkgconfig"] {os =3D "macos" & os-distribution =3D "macports"}
  ["pkgconf"] {os =3D "freebsd"}
  ["pkgconf-pkg-config"] {os-distribution =3D "rhel" & os-version >=
=3D "8"}
  ["pkgconf-pkg-config"] {os-distribution =3D "centos" & os-version >=
;=3D "8"}
  ["pkgconf-pkg-config"] {os-distribution =3D "ol" & os-version >=3D=
 "8"}
  ["system:pkgconf"] {os =3D "win32" & os-distribution =3D "cygwinports=
"}
  ["pkgconf"] {os-distribution =3D "cygwin"}
]

depexts in Dune

Dune doesn't install depexts automatically as the Dune develop= ers are a little nervous about running commands that would modify the globa= l system state. This may change at some point, but for now Dune only provid= es support for listing the names of depexts, leaving it up to = the user to install them as they see fit.

The dune show depexts command can be used to list the de= pexts of a project. For that command to work the project must have a= lock directory. Here's an example of listing the depexts of a= project:

$ dune pkg lock
...
$ dune show depexts
libao
libffi
pkgconf
sdl2

I ran these commands on a Mac with homebrew installed, so the package names= are from the homebrew package repo. Each package listed there is one of th= e depexts of a package whose lockfile appears in the project's= lock directory. Let's look at how this information is stored. Using = pkg-config as an example:

$ cat dune.lock/conf-pkg-config.pkg
(version 4)

(build
 (run pkgconf --version))

(depexts pkgconf)

The relevant part for us is the depexts field. The current rel= eased version of Dune only stores the package's depexts for th= e system where dune pkg lock was run. The command dune s= how depexts simply concatenates the depexts fields from= each lockfile in the lock directory.

When thinking about portable lock directories I always like to imagine what= the experience would be using Dune for a project where the lock directory = is checked into version control. I frequently switch between using two diff= erent machines for development - one running Linux and the other running Ma= cOS. If I was to check in the lock directory I just generated on my Mac, an= d then check it out on Linux and continue development, dune show depe= xts would show me a list of packages for the wrong system!

Portable depexts in Dune

To make depexts portable, one's first instinct might be to use= the same approach as taken with the depends field outlined here, listing the depexts for = each platform for which the solver was run. Indeed such a change was added = to the Dune Developer Preview when we first introduced portable lock direct= ories, however we quickly realized a problem.

The depends, build, and install fiel= ds of a package rarely vary between OS distribution. It's reasonably common= for those fields to be different on different OSes, but very rare for them= to also be different on different OS distributio= ns. As such, it's expected that users will elect to solve their proj= ects for each common OS, but there would be little value in solving project= s for each OS distro. In fact solving for multiple distros would slow down = solving and bloat the lock directory, and users would somehow need to come = up with a definitive list of distros to solve for.

But the depexts field is high= ly-dependent on the OS distro since package names are specific to the packa= ge repository for a particular distro. Recall that the depexts= field in Opam package metadata lists package names along with the conditio= ns under which that package name should be used, e.g.:

["pkg-config"] {os-family =3D "debian" | os-family =3D "ubuntu"}
["pkgconf"] {os-distribution =3D "arch"}
["pkgconf-pkg-config"] {os-family =3D "fedora"}
["pkgconfig"] {os-distribution =3D "centos" & os-version <=3D "7"}

These conditions almost always involve the name of the OS distro, and to ma= ke matters worse they also sometimes involve the OS version, as packages can change their names between different ver= sions of the same OS. Evaluating these conditions at solve time for platfor= ms with no distro or version specified tends to result in lockfiles with no depexts at all, since all th= e conditions evaluate to false.

The use case we have in mind for depexts in Dune is that a use= r will solve their project coarsely, usually just for each common OS with n= o consideration for distribution or version. Then when they run dune = show depexts, the depexts will be listed using names ap= propriate to the current machine. This means Dune needs to store enough met= adata about depexts to compute system-specific depext names at a later time. This means storing the same names and condition= s as are currently stored in Opam files, and deferring evaluation of the co= nditions until as late as possible, such as right when dune show depe= xts is run.

The latest version of the Dune Developer Preview does just this; translatin= g the depexts field from each package's Opam file into a Dune-= friendly S-expression. After this change, the depexts field of= conf-pkg-config's lockfile is:

$ cat dune.lock/conf-pkg-config.4.pkg
...
(depexts
 ((pkg-config)
  (or_absorb_undefined_var
   (=3D %{os_family} debian)
   (=3D %{os_family} ubuntu)))
 ((pkgconf)
  (=3D %{os_distribution} arch))
 ((pkgconf-pkg-config)
  (=3D %{os_family} fedora))
 ((pkgconfig)
  (and_absorb_undefined_var
   (=3D %{os_distribution} centos)
   (<=3D %{os_version} 7)))
 ((pkgconf-pkg-config)
  (=3D %{os_distribution} mageia))
 ((pkgconfig)
  (and_absorb_undefined_var
   (=3D %{os_distribution} rhel)
   (<=3D %{os_version} 7)))
 ((pkgconfig)
  (and_absorb_undefined_var
   (=3D %{os_distribution} ol)
   (<=3D %{os_version} 7)))
 ((pkgconf)
  (=3D %{os_distribution} alpine))
 ((pkg-config)
  (=3D %{os_distribution} nixos))
 ((pkgconf)
  (and_absorb_undefined_var
   (=3D %{os} macos)
   (=3D %{os_distribution} homebrew)))
 ((pkgconfig)
  (and_absorb_undefined_var
   (=3D %{os} macos)
   (=3D %{os_distribution} macports)))
 ((pkgconf)
  (=3D %{os} freebsd))
 ((pkgconf-pkg-config)
  (and_absorb_undefined_var
   (=3D %{os_distribution} rhel)
   (>=3D %{os_version} 8)))
 ((pkgconf-pkg-config)
  (and_absorb_undefined_var
   (=3D %{os_distribution} centos)
   (>=3D %{os_version} 8)))
 ((pkgconf-pkg-config)
  (and_absorb_undefined_var
   (=3D %{os_distribution} ol)
   (>=3D %{os_version} 8)))
 ((system:pkgconf)
  (and_absorb_undefined_var
   (=3D %{os} win32)
   (=3D %{os_distribution} cygwinports)))
 ((pkgconf)
  (=3D %{os_distribution} cygwin)))

That's a 1:1 translation of the depexts field from conf-= pkg-config's Opam file. There's enough information there so that the= appropriate package name can be computed on demand rather than just at sol= ve time.

This bring us a step closer to a world where Dune users can check their loc= k directories into version control with confidence that their builds are re= producible across different platforms. To try out the latest version of the= Dune Developer Preview, go to prev= iew.dune.build.

Semgrep is hiring OCaml developers to work on the static analy= sis engine

iago announced

Semgrep is an application security company focused on detecting and remedia= ting vulnerabilities. The static analysis engine is primarily written in OC= aml. We are looking for a senior software engineer to join the Code team, w= here we focus on first-party code vulnerability and secrets scanning.

The ideal candidate has experience building program analysis tooling or cod= e scanners (perhaps in a research context).

Both on-site and remote work are OK.

If this sounds interesting to you, see our job posting at Senior Program Analysis= Engineer, Code.

Let me know if you have any questions!

Elpe, a config-as-code build system written in OCaml+Rust

pmeunier announced

I just released the first version of Elpe, a build system designed as a ble= nd of Nix and Ubuntu.

It uses OCaml for the frontend, and communicates with a Rust backend via gR= PC.

Blog post about it

Dune dev meeting

Etienne Marais announced

Hello :vulcan_salute:=20 The next Dune Dev Meeting will be tomorrow on Wednesday, June, 11th at 1= 6:00 CEST. This is going to be a one-hour-long meeting.

Whether you are a maintainer, a regular contributor, a new joiner or just c= urious, you are welcome to join: these discussions are opened! The goal of = these meetings is to provide a place to discuss the ongoing work together a= nd synchronize with the Dune developers :+1:

The agenda is available on the meeting dedicated page. Feel free to add more= items in it.

Old CWN

If you happen to miss a CWN, you can send me a message and I'll mail it to you, or go take a loo= k at the archive or the <= a href=3D"https://alan.petitepomme.net/cwn/cwn.rss">RSS feed of the archive= s.

If you also wish to receive it every week by mail, you may subscribe to the= caml-list.

--=-=-=--