Ross Burton [Tue, 5 Aug 2025 11:26:14 +0000 (12:26 +0100)]
dbus: add message-bus PACKAGECONFIG
There's no need to build an actual message bus in native or nativesdk
environments, as if DBus is needed in those environments then it will be
used to connect to the existing session or system bus.
Add a PACKAGECONFIG for the message bus, and wrap the packaging logic
with a PACKAGECONFIG check.
Expat is only needed by the bus, so this reduces the mandatory build
dependencies in the native case.
This means we can merge the overridden do_install appends, as native and
nativesdk don't have the message bus enabled so they don't install
dbus-launch.
Signed-off-by: Ross Burton <ross.burton@arm.com> Signed-off-by: Mathieu Dubois-Briand <mathieu.dubois-briand@bootlin.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Ross Burton [Tue, 5 Aug 2025 11:26:13 +0000 (12:26 +0100)]
dbus: use the systemd class to handle the unit files
Originally, the dbus recipe couldn't use the systemd class because there
was a circular dependency between systemd and dbus.
However, since systemd v209 in 2014[1] systemd hasn't needed libdbus, as
it has it's own implementation of the client library. DBus does not use
the systemd libraries, so there is no circular dependency.
The dbus build was already was installing the service and socket files,
so we are installing them again. Remove the installation of the units.
Manually mask dbus-1.service by simply creating a symlink, instead of
depending on systemctl and using an postinstall script.
Signed-off-by: Ross Burton <ross.burton@arm.com>
[1] dbus: 718db96199 ("core: convert PID 1 to libsystemd-bus")
Signed-off-by: Mathieu Dubois-Briand <mathieu.dubois-briand@bootlin.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Ross Burton [Mon, 4 Aug 2025 19:54:25 +0000 (20:54 +0100)]
dbus: glib is only used in the test suite
The glib/gio libraries are only used in a few of the tests:
$ grep use_glib
meson.build:use_glib = glib.found() and gio.found()
test/meson.build:if use_glib
test/meson.build:if message_bus and tools and platform_unix and use_glib
test/meson.build:if use_glib
test/meson.build:if message_bus and tools and platform_unix and use_glib
So there's no need to depend on glib if we're not building the tests.
Explicitly enable/disable the modular tests option to ensure that when
the tests are not being installed we don't still need glib to build them.
Signed-off-by: Ross Burton <ross.burton@arm.com> Signed-off-by: Mathieu Dubois-Briand <mathieu.dubois-briand@bootlin.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Nikhil R [Tue, 5 Aug 2025 07:24:43 +0000 (12:54 +0530)]
cmake: Add PACKAGECONFIG option for debugger support
Starting from CMake version 2.27 support for interactive debugging of CMake
scripts and configurations was added. However, by default the `nativesdk-cmake`
is compiled with debugger support turned off.
This change adds debugger support for cmake
Signed-off-by: Nikhil R <nikhilr5@kpit.com> Signed-off-by: Mathieu Dubois-Briand <mathieu.dubois-briand@bootlin.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Ross Burton [Mon, 4 Aug 2025 19:52:34 +0000 (20:52 +0100)]
glib-2.0: -dev should depend on -utils
The -dev package should depend on -utils, as there are a number of
utilities in that package which are needed when compiling GLib-using code,
such as glib-genmarshal and glib-compile-resources.
Signed-off-by: Ross Burton <ross.burton@arm.com> Signed-off-by: Mathieu Dubois-Briand <mathieu.dubois-briand@bootlin.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Ross Burton [Mon, 4 Aug 2025 19:52:33 +0000 (20:52 +0100)]
dbus-glib: remove no-examples.patch
This patch has been in OpenEmbedded since 2006 with no explanation[1].
Possibly the intention was to reduce build time slightly or remove some
breakage, but it's useful to link the library we're building against a
test binary.
Ross Burton [Mon, 4 Aug 2025 19:52:32 +0000 (20:52 +0100)]
dbus-glib: remove unused packaging of tests
We're carrying a patch to install the tests, but we don't actually
install them by default or have any ptest infrastructure to run them.
As this is complicating the recipe for no reason, remove it all. If
someone in the future wants to run the tests they can do it with ptest
so they're exercised correctly.
Signed-off-by: Ross Burton <ross.burton@arm.com> Signed-off-by: Mathieu Dubois-Briand <mathieu.dubois-briand@bootlin.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Ross Burton [Mon, 4 Aug 2025 19:52:31 +0000 (20:52 +0100)]
dbus-glib: package the binding tool into PN-tools, enable nativesdk
In a SDK environment we need a nativesdk build of dbus-glib for the
dbus-binding-tool binary. Add a nativesdk variation and put the tool into
a -tools subpackage so it can be installed if needed.
Signed-off-by: Ross Burton <ross.burton@arm.com> Signed-off-by: Mathieu Dubois-Briand <mathieu.dubois-briand@bootlin.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Gyorgy Sarvari [Sat, 2 Aug 2025 13:12:26 +0000 (15:12 +0200)]
dpkg: upgrade 1.22.11 -> 1.22.21
All executables and scripts (except for start-stop-daemon script)
were moved from sbin to bin after the following commit:
https://salsa.debian.org/dpkg-team/dpkg/-/commit/12e3bc2991ac27f73545a246bb95b84fb8d262c9
Markus Volk [Sat, 2 Aug 2025 09:28:50 +0000 (11:28 +0200)]
autoconf-archive: add backport patches to fix gl and glx detection
Detecting opengl using autoconf-archive currently fails:
| aclocal: warning: couldn't open directory 'm4': No such file or directory
| configure.ac:306: error: _AX_CHECK_GL_MANUAL_LIBS_GENERIC: argument must not be empty
| ../sources/autoconf-2.72/lib/m4sugar/m4sh.m4:690: _AS_IF_ELSE is expanded from...
| ../sources/autoconf-2.72/lib/m4sugar/m4sh.m4:697: AS_IF is expanded from...
| /home/flk/poky/build/tmp/work/corei7-64-poky-linux/cava/0.10.4/recipe-sysroot-native/usr/share/aclocal/ax_check_gl.m4:187: _AX_CHECK_GL_MANUAL_LIBS_GENERIC is expanded from...
| ../sources/autoconf-2.72/lib/m4sugar/m4sh.m4:595: AS_CASE is expanded from...
| /home/flk/poky/build/tmp/work/corei7-64-poky-linux/cava/0.10.4/recipe-sysroot-native/usr/share/aclocal/ax_check_gl.m4:253: AX_CHECK_GL is expanded from...
| ../sources/autoconf-2.72/lib/m4sugar/m4sh.m4:697: AS_IF is expanded from...
| ../sources/autoconf-2.72/lib/m4sugar/m4sh.m4:697: AS_IF is expanded from...
| configure.ac:306: the top level
| autom4te: error: m4 failed with exit status: 1
This issue has already been fixed upstream, but there has been no new release since then.
Signed-off-by: Markus Volk <f_l_k@t-online.de> Signed-off-by: Mathieu Dubois-Briand <mathieu.dubois-briand@bootlin.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Mingli Yu [Fri, 1 Aug 2025 10:29:12 +0000 (18:29 +0800)]
ovmf: Don't define bool type if building in C23 mode
Backport a patch [1] to fix the below build failure:
/buildarea/tmp/work/corei7-64-wrs-linux/ovmf/edk2-stable202502/sources/ovmf-edk2-stable202502/SecurityPkg/DeviceSecurity/SpdmLib/Include/hal/LibspdmStdBoolAlt.h:13:17: error: two or more data types in declaration specifiers
13 | typedef BOOLEAN bool;
| ^~~~
/buildarea/tmp/work/corei7-64-wrs-linux/ovmf/edk2-stable202502/sources/ovmf-edk2-stable202502/SecurityPkg/DeviceSecurity/SpdmLib/Include/hal/LibspdmStdBoolAlt.h:13:1: error: useless type name in empty declaration [-Werror]
13 | typedef BOOLEAN bool;
Gyorgy Sarvari [Sun, 3 Aug 2025 07:35:41 +0000 (09:35 +0200)]
webkitgtk: upgrade 2.48.2 -> 2.48.5
Changelog:
2.48.5:
Fix several crashes.
2.48.4:
Improve emoji font selection with USE_SKIA=ON.
Improve playback of multimedia streams from blob URLs.
Fix the build with USE_SKIA_OPENTYPE_SVG=ON and USE_SYSPROF_CAPTURE=ON.
Fix the build on LoongArch with USE_SKIA=ON.
Fix crash when using a WebKitWebView widget in an offscreen window.
Fix several crashes and rendering issues.
2.48.3:
Fix a crash introduced by the new threaded rendering implementation using Skia API.
Improve rendering performance by recording layers once and replaying every dirty region in different worker threads.
Fix a crash when setting WEBKIT_SKIA_GPU_PAINTING_THREADS=0.
Fix a reference cycle in webkitmediastreamsrc preventing its disposal.
Khem Raj [Sun, 3 Aug 2025 04:08:10 +0000 (21:08 -0700)]
musl: Update to tip of trunk
Brings following fixes
* 8fd5d031 aarch64: mask off SME and unknown/future hwcap bits
* 709fee55 aarch64: replace asm source file for __set_thread_area with inline asm
* bd981f33 elf.h: add AT_HWCAP3 and AT_HWCAP4
* f96e47a2 printf: fix regression in large double formatting on ld128 archs
* caae5a8b fix register name usage in aarch64 clone.s
* ab4635fb make __getauxval a public ABI symbol
* fcdff46a statx: add Linux 6.11 fields/constants
* 18289e5d ldso: fix typo in comment
* 86373b49 powerpc: update HWCAP bits for Power10
* fde29c04 stdio: skip empty iovec when buffering is disabled
Gyorgy Sarvari [Sat, 2 Aug 2025 15:53:03 +0000 (17:53 +0200)]
quota: upgrade 4.09 -> 4.10
Drop 0001-Fix-building-on-musl.patch, because it is included in this release.
Add backported 0001-setproject-Fix-openWRT-build.patch, which adds a missing header
to prevent build failure with musl.
Changelog:
- Update Polish translation
- quotasys: Make detection of QF_META format work for bcachefs
- quotaio_xfs: Fix memory leak
- setproject: Add support for bcachefs REINHERIT_ATTRS ioctl
- setproject: Simple utility for setting projects on files/directories
- Move user/group/project name translation into common.[ch]
- Add support for bcachefs
- Fix building on musl
- quotaio_xfs: Convert remaining quotactl(2) calls to quotactl_handle()
- quotaio_xfs: Fix quota-tools on XFS
- quotaio_xfs: Fix error handling in xfs_read_dquot()
- Disable BSD_BEHAVIOUR by default
- quotaops: Checking egid with BSD_BEHAVIOR
- Enable support for tmpfs quotas
- Add quotactl_fd() support
- Rename searched_dir->sd_dir to sd_isdir
- quota-nld: fix open PID file failed when systemd read it
- edquota: Fix editing of individual user grace times
- setquota: Avoid false error messages when setting grace times
- Make configure.ac POSIX compliant
- Update required gettext version
Gyorgy Sarvari [Sat, 2 Aug 2025 06:46:21 +0000 (08:46 +0200)]
gnutls: upgrade 3.8.9 -> 3.8.10
Skip compress-cert-conf test when running ptests, because it requires
gnutls to be compiled with brotli PACKAGECONFIG, however brotli is not
part of oe-core.
Khem Raj [Fri, 1 Aug 2025 04:22:35 +0000 (21:22 -0700)]
toolchain/clang-native: Set BUILD_LDFLAGS instead of LDFLAGS
BUILD_LDFLAGS is used by other recipes to emit native LDFLAGS
into their cmake toolchain files especially in QT layers. it
will usually be inherited by recipes wanting clang provide
BUILD_* variables so this is more appropriate than LDFLAGS to
pass these options.
Khem Raj [Tue, 5 Aug 2025 16:08:54 +0000 (09:08 -0700)]
clang: Add packageconfig knob for opt-viewer
The optimization viewer is a web-based tool that helps developers visualize
and analyze LLVM's optimization passes. It generates reports showing
Which optimizations were applied to specific functions.
Why certain optimizations were or weren't performed.
Performance remarks and missed optimization opportunities
Interactive views of the optimization pipeline.
Its a nice add-on, keep it disabled by default.
Signed-off-by: Khem Raj <raj.khem@gmail.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Ross Burton [Fri, 1 Aug 2025 12:55:18 +0000 (13:55 +0100)]
libclc: do native build of prepare_builtins in a fresh environment
The environment has variables like LDFLAGS set which CMake will try and
use, so until our cmake class is comprehensive enough to nuke those in
the native toolchain file (if that is possible) do a build inside a
clean (apart from PATH) environment to avoid cross-contamination.
As noticed by Khem Raj, this can fail in nativesdk builds as the target
flags will be passed to the native link resulting in failures like:
Requesting program interpreter: /usr/local/oe-sdk-hardcoded-buildpath/sysroots/x86_64-yoesdk-linux/lib/ld-linux-x86-64.so.2
Signed-off-by: Ross Burton <ross.burton@arm.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Richard Purdie [Fri, 1 Aug 2025 10:55:13 +0000 (11:55 +0100)]
bitbake/conf: Default to zstd compressed image output
Switch our default qemu images to use .zst compressed images by default
since this is the output format we release during the release process
and is the one that users would prefer to download. This makes the release
process use the actual generated output from the system and avoids post
processing.
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
With snapshot enabled, no change on rootfs will be saved after qemu
shutdown. Since this is not what a user might expect, print the snapshot
mode state and its consequence in console at runqemu start.
Signed-off-by: Yoann Congal <yoann.congal@smile.fr> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
runqemu: Add support for running compressed .zst rootfs images
Enhance runqemu to detect and decompress .zst-compressed rootfs images
(e.g. ext4.zst, wic.zst) automatically. If a decompressed image already
exists in the original directory, it will be reused to avoid overwriting
build artifacts. Otherwise, the image is decompressed and removed after
the QEMU session ends.
This allows runqemu to be used seamlessly with compressed image formats
generated by the build system or during releases.
Note: support for .zst images is only available when snapshot mode is
enabled
IMPORTANT:
This patch assumes that the original directory of the .zst-compressed
image is writable. If, for some reason, the path passed from CI or
another system to the script is read-only, the decompression step will
fail when trying to write the uncompressed image to the same directory.
* GCC 12.1 or later is now required to build the GNU C Library.
* GNU Binutils 2.39 or later is now required to build the GNU C Library.
* Support for lightweight stack guard pages via madvise and the
MADV_GUARD_INSTALL flag has been added to pthread_create.
* This is major release, changelog [1]
Peter Marko [Thu, 31 Jul 2025 19:27:19 +0000 (21:27 +0200)]
oeqa: do not fail when sdk package is not available
Prior to commits:
* 11277efd057685558a744e98082b5709e849dd2a
* d0e8b83d05957b1f22d08582e364afa4b522801e
the tests were skipped if package was not available.
Now the code calls function ensure_host_package which says
"try to sdk-install missing dependencies", however in fact for sdkext it
causes a failure if the installation is not available.
Since maturin is not installed in any image, it cannot be installed
unless it's downloaded from sstate-cache mirror populated by a world
build. These builds are however now not done for powerpc and mips.
IT also does not work in local builds without sstate-cache mirror.
Fix this by skipping the test if the package cannot be installed to
match the original behavior before those commits.
Signed-off-by: Peter Marko <peter.marko@siemens.com> Cc: Ross Burton <ross.burton@arm.com> Cc: Khem Raj <raj.khem@gmail.com> Signed-off-by: Mathieu Dubois-Briand <mathieu.dubois-briand@bootlin.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Peter Marko [Thu, 31 Jul 2025 19:35:06 +0000 (21:35 +0200)]
oeqa: fix OETestCalledProcessError for check_output method
Per documentation, subprocess.CalledProcessError exception has stderr
filled out only for run method, it's None for check_output method.
So serialize it only if it's not None.
Avoids:
File "<poky-dir>/meta/lib/oeqa/utils/subprocesstweak.py", line 15, in __str__
s = s + "\nStandard Error: " + strify(self.stderr)
~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~
TypeError: can only concatenate str (not "NoneType") to str
Signed-off-by: Peter Marko <peter.marko@siemens.com> Signed-off-by: Mathieu Dubois-Briand <mathieu.dubois-briand@bootlin.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Ross Burton [Fri, 1 Aug 2025 20:49:24 +0000 (21:49 +0100)]
systemd: explicitly disable dbus
This is actually only used in a single test that we don't build, so
explicitly disable DBus instead of offering a PACKAGECONFIG that doesn't
do what you might expect (enable some systemd/dbus integration).
This doesn't change behaviour as this option wasn't enabled by default.
Signed-off-by: Ross Burton <ross.burton@arm.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Gyorgy Sarvari [Fri, 1 Aug 2025 18:46:03 +0000 (20:46 +0200)]
gdbm: upgrade 1.24 -> 1.26
Removed c11 flag, as it seems to build fine now with default flags.
ptests passed:
All 38 tests were successful.
DURATION: 11
END: /usr/lib/gdbm/ptest
2025-08-01T18:37
STOP: ptest-runner
TOTAL: 1 FAIL: 0
Changelog:
1.26:
- Fixed build with musl libc
- Fixed build on MacOS
- Improved testsuite
1.25:
- New function: gdbm_open_ext
This function provides a general-purpose interface for opening and
creating GDBM files. It combines the possibilities of gdbm_open and
gdbm_fd_open and provides detailed control over database file locking.
- New gdbmtool command: collisions
The command prints the collision chains for the current bucket, or for
buckets identified by its arguments.
- Pipelines in gdbmtool
The output of a gdbmtool command can be connected to the input of a
shell command using the traditional pipeline syntax.
- Fix a bug in block coalescing code
Signed-off-by: Gyorgy Sarvari <skandigraun@gmail.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Ross Burton [Tue, 29 Jul 2025 16:20:29 +0000 (17:20 +0100)]
clang: no need to depend on python3native/python3targetconfig
Now that lldb has been split out of the clang recipe, there's no need
for the clang recipe to have Python integration beyond the current
Python major version for installing the libclang bindings, which can be
done by simply inheriting python3-dir.
The installation of six.py was done by lldb, and was removed in LLVM 16.
Signed-off-by: Ross Burton <ross.burton@arm.com> Signed-off-by: Mathieu Dubois-Briand <mathieu.dubois-briand@bootlin.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Ross Burton [Mon, 19 May 2025 12:59:30 +0000 (13:59 +0100)]
ccache: enable ccache for all recipes if it is in HOSTTOOLS
At the moment we don't allow ccache for native recipes to avoid the
dependency loop of native recipes needing ccache-native which then
depends on itself.
One way to avoid this dependency loop is to just provide a host ccache,
so enable ccache globally if ccache is in HOSTTOOLS. This isn't set
out of the box, but does work.
Signed-off-by: Ross Burton <ross.burton@arm.com> Signed-off-by: Mathieu Dubois-Briand <mathieu.dubois-briand@bootlin.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Jason Schonberg [Thu, 31 Jul 2025 01:15:12 +0000 (21:15 -0400)]
libsdl2: update SRC_URI to use https
This fixes :
WARNING: libsdl2-native-2.32.8-r0 do_fetch: Failed to fetch URL http://www.libsdl.org/release/SDL2-2.32.8.tar.gz, attempting MIRRORS if available
Signed-off-by: Jason Schonberg <schonm@gmail.com> Signed-off-by: Mathieu Dubois-Briand <mathieu.dubois-briand@bootlin.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Ross Burton [Wed, 30 Jul 2025 16:03:31 +0000 (17:03 +0100)]
classes/python_pep517: centralise shared inherits
For the build process to actually work some inherits are always needed:
- python3native for the python that is actually running build.
- setuptools3-base (badly named) defines how to build extensions and
where to put modules.
Instead of inheriting these in every class, inherit them once in the
python_pep517 class.
Signed-off-by: Ross Burton <ross.burton@arm.com> Signed-off-by: Mathieu Dubois-Briand <mathieu.dubois-briand@bootlin.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
feature-arm-crypto: Add +nocrypto to -mcpu when crypto not in features
When crypto is not in tune features then add +nocryto to
-mcpu explicitly. This makes the behavior between clang
and gcc match. Currently -mcpu=cortex-a72 has different
behavior in clang and gcc in terms of what features are
considered default. Clang enables different set of common
features than gcc on other hand. For example clang
enables crypto with default set but gcc
does not, gcc recommends to disable unavailable extensions
in -mcpu [1] explicitly. crypto is optional on cortex-a53
and cortex-a72. This is not as common but Broadcom
SOCs in raspberrypi3/4 have dropped crypto for cost
reasons [2]. This results in illegal instruction
traps [3] [4] when building components e.g. chromium,
qtwebengine, weston etc. with clang using -mcpu=cortex-a72
for rpi4 target.
Adding +nocrypto makes clang behave like gcc does today. We
do have separate tune if crypto enabled cortex-a72 cores
are to be targeted (cortexa72-cryto) as DEFAULTTUNE
They are added to default feature file since crypto extension
is available in multiple arm architecture versions e.g. armv8,
armv9. It is optional extension as per spec [5]
Extensions can be enabled and disabled with -mcpu using the same
syntax as with -march, and have same effect thats why it is
intrumented via TUNE_CCARGS_MARCH_OPTS
Added support for SFrame stack tracing with ELF binaries on x86 and AArch64 architectures.
Support for various new RISC-V extensions
Support for most Armv9.6 extensions.
libcxx,compiler-rt: Remove use of non-existing runtime-llvm override
Provide libunwind based on TC_CXX_RUNTIME
When TC_CXX_RUNTIME is set to be 'llvm' distro wants
to use llvm provided runtime elements therefore provide
libunwind when TC_CXX_RUNTIME = "llvm"
util-linux: correct test case kill/decode for bash 5.3
After upgrading bash to 5.3 to contain commit [1], if SIGINT was trapped in
asynchronous subshell, bash called set_signal_async_ignored to make sure
processes that are created by this asynchronous subshell to ignore SIGINT.
And it caused test case `kill/decode' failed, the signal INT was existed in
both of Blocked and Ignored
Ross Burton [Tue, 29 Jul 2025 08:59:35 +0000 (09:59 +0100)]
python_setuptools_build_meta: clean the build directory in configure
It's not currently possible to set the build tree to be somewhere we
control, but we know it will always be in the build directory alongside
the pyproject.toml so we can [cleandirs] that.
Signed-off-by: Ross Burton <ross.burton@arm.com> Signed-off-by: Mathieu Dubois-Briand <mathieu.dubois-briand@bootlin.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Ross Burton [Tue, 29 Jul 2025 08:59:34 +0000 (09:59 +0100)]
setuptools3: clean the build directory in configure
It's not currently possible to set the build tree to be somewhere we
control, but we know it will always be in the build directory alongside
the setup.py so we can [cleandirs] that.
Signed-off-by: Ross Burton <ross.burton@arm.com> Signed-off-by: Mathieu Dubois-Briand <mathieu.dubois-briand@bootlin.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>