Security and provenance
AEL, the Agent Engineering Language, will check every package completely before it becomes part of your project, and nothing in a package will run while it is checked or installed. AEL will verify every package before using it, whatever its host: its fingerprint, its contents and how it was built.
Status
Planned for AEL Beta 0.0.1. AEL is not available yet.
Nothing will run when you add a package
- A package will never run an install script. There will be no install, build or post-install scripts, and no compiler plug-ins.
- Every package, from OpenEng or from you, will be written in AEL and ship as compiled, verified AEL, with no bundled native code. See Creating a package.
- A
builddependency will never run inside the compiler, as an install script or by itself during a build; see Kinds. - Checking, compiling and building will never contact the registry, change a version or install anything. Nothing will download when an app starts.
What AEL will check before using a package
| Check | Official packages | Private packages |
|---|---|---|
| Signature | Signed by OpenEng; anything else will be refused. | Not signed by OpenEng, and never treated as official. |
| Fingerprint | Matches the signed index, then your lock file. | Matches your manifest and your lock file. |
| Safe file layout | Yes | Yes |
| Contents | Yes | Yes |
| Name and publisher | Yes | Yes |
| How it was built | Yes | Yes |
- Safe file layout. Every path will have to stay inside the package's own folder. Links, absolute paths, repeated names, names that differ only in letter case and files over the size limits will be refused.
- Contents. The file will have to hold compiled AEL only. Every compiled component will have to match its description, and every export will have to be what the package says it is.
- Name and publisher. The name inside the package will have to be the name you asked for, and the publisher the one your manifest names.
- How it was built. The package's build record will have to tie it to the AEL source and the toolchain that built it.
The whole file will be checked in a temporary place before anything is written into your project. If any check fails, your project will be left exactly as it was.
No swapped names
- AEL will never treat an external package as an official one, even if its name matches. Official will mean published and signed by OpenEng on the official registry.
- A private package that cannot be reached will never fall back to an official package of the same name.
- An unknown name will be an error. AEL will never guess at a misspelled name or pick a package whose name merely looks similar.
- A package's own dependencies will come from what its publisher declared. Your project will not be able to swap them for others by accident, and neither will another package.
Permissions will stay yours
A package's capabilities will be a request, never a grant. Your deployment will decide what a program may do, and a package will receive only what your code passes to it. A signature will prove who published a package; it will grant no permission. See Effects and capabilities.
Pinned, repeatable builds
Your lock file will pin the exact versions you built with, so builds repeat, even offline. Your project will record every package file's fingerprint, and AEL will refuse the file if it ever changes. An official version, once published, will never change.
Knowing what a program contains
Each build will record exactly what went into it, so you can check what a program contains. ael refmap (command names may change before launch) will show what references what, for the whole project, one folder or one file, and list unused code and packages.
Access tokens
Access tokens for your private host will stay outside your project files. They will never appear in your manifest, your lock file, a package file or AEL's output. See Private packages.
What the checks will not promise
- A fingerprint will prove that a file is the one you recorded, not who made it.
- A signature will prove that OpenEng published a package. It will not make the package right for your program, and it will grant the package no permission.
- Adding a private package from someone else will be your decision. Look at the capabilities it asks for before you add it.
Reporting a problem
Security reports go to ael@openeng.ai, the contact address at the foot of every page.