diff --git a/Documentation/meson.build b/Documentation/meson.build
index c4e9892470de..b3b4f0b66f57 100644
--- a/Documentation/meson.build
+++ b/Documentation/meson.build
@@ -1,3 +1,5 @@
+# SPDX-License-Identifier: CC0-1.0
+
 doc_install_dir = join_paths(get_option('datadir'), 'doc',
                              'libcamera-@0@'.format(libcamera_version))
 
diff --git a/LICENSES/CC0-1.0.txt b/LICENSES/CC0-1.0.txt
new file mode 100644
index 000000000000..a343ccd4335f
--- /dev/null
+++ b/LICENSES/CC0-1.0.txt
@@ -0,0 +1,119 @@
+Creative Commons Legal Code
+
+CC0 1.0 Universal CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES
+NOT PROVIDE LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE
+AN ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS INFORMATION
+ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES REGARDING THE USE
+OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED HEREUNDER, AND DISCLAIMS
+LIABILITY FOR DAMAGES RESULTING FROM THE USE OF THIS DOCUMENT OR THE INFORMATION
+OR WORKS PROVIDED HEREUNDER.
+
+Statement of Purpose
+
+The laws of most jurisdictions throughout the world automatically confer exclusive
+Copyright and Related Rights (defined below) upon the creator and subsequent
+owner(s) (each and all, an "owner") of an original work of authorship and/or
+a database (each, a "Work").
+
+Certain owners wish to permanently relinquish those rights to a Work for the
+purpose of contributing to a commons of creative, cultural and scientific
+works ("Commons") that the public can reliably and without fear of later claims
+of infringement build upon, modify, incorporate in other works, reuse and
+redistribute as freely as possible in any form whatsoever and for any purposes,
+including without limitation commercial purposes. These owners may contribute
+to the Commons to promote the ideal of a free culture and the further production
+of creative, cultural and scientific works, or to gain reputation or greater
+distribution for their Work in part through the use and efforts of others.
+
+For these and/or other purposes and motivations, and without any expectation
+of additional consideration or compensation, the person associating CC0 with
+a Work (the "Affirmer"), to the extent that he or she is an owner of Copyright
+and Related Rights in the Work, voluntarily elects to apply CC0 to the Work
+and publicly distribute the Work under its terms, with knowledge of his or
+her Copyright and Related Rights in the Work and the meaning and intended
+legal effect of CC0 on those rights.
+
+1. Copyright and Related Rights. A Work made available under CC0 may be protected
+by copyright and related or neighboring rights ("Copyright and Related Rights").
+Copyright and Related Rights include, but are not limited to, the following:
+
+i. the right to reproduce, adapt, distribute, perform, display, communicate,
+and translate a Work;
+
+      ii. moral rights retained by the original author(s) and/or performer(s);
+
+iii. publicity and privacy rights pertaining to a person's image or likeness
+depicted in a Work;
+
+iv. rights protecting against unfair competition in regards to a Work, subject
+to the limitations in paragraph 4(a), below;
+
+v. rights protecting the extraction, dissemination, use and reuse of data
+in a Work;
+
+vi. database rights (such as those arising under Directive 96/9/EC of the
+European Parliament and of the Council of 11 March 1996 on the legal protection
+of databases, and under any national implementation thereof, including any
+amended or successor version of such directive); and
+
+vii. other similar, equivalent or corresponding rights throughout the world
+based on applicable law or treaty, and any national implementations thereof.
+
+2. Waiver. To the greatest extent permitted by, but not in contravention of,
+applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and
+unconditionally waives, abandons, and surrenders all of Affirmer's Copyright
+and Related Rights and associated claims and causes of action, whether now
+known or unknown (including existing as well as future claims and causes of
+action), in the Work (i) in all territories worldwide, (ii) for the maximum
+duration provided by applicable law or treaty (including future time extensions),
+(iii) in any current or future medium and for any number of copies, and (iv)
+for any purpose whatsoever, including without limitation commercial, advertising
+or promotional purposes (the "Waiver"). Affirmer makes the Waiver for the
+benefit of each member of the public at large and to the detriment of Affirmer's
+heirs and successors, fully intending that such Waiver shall not be subject
+to revocation, rescission, cancellation, termination, or any other legal or
+equitable action to disrupt the quiet enjoyment of the Work by the public
+as contemplated by Affirmer's express Statement of Purpose.
+
+3. Public License Fallback. Should any part of the Waiver for any reason be
+judged legally invalid or ineffective under applicable law, then the Waiver
+shall be preserved to the maximum extent permitted taking into account Affirmer's
+express Statement of Purpose. In addition, to the extent the Waiver is so
+judged Affirmer hereby grants to each affected person a royalty-free, non
+transferable, non sublicensable, non exclusive, irrevocable and unconditional
+license to exercise Affirmer's Copyright and Related Rights in the Work (i)
+in all territories worldwide, (ii) for the maximum duration provided by applicable
+law or treaty (including future time extensions), (iii) in any current or
+future medium and for any number of copies, and (iv) for any purpose whatsoever,
+including without limitation commercial, advertising or promotional purposes
+(the "License"). The License shall be deemed effective as of the date CC0
+was applied by Affirmer to the Work. Should any part of the License for any
+reason be judged legally invalid or ineffective under applicable law, such
+partial invalidity or ineffectiveness shall not invalidate the remainder of
+the License, and in such case Affirmer hereby affirms that he or she will
+not (i) exercise any of his or her remaining Copyright and Related Rights
+in the Work or (ii) assert any associated claims and causes of action with
+respect to the Work, in either case contrary to Affirmer's express Statement
+of Purpose.
+
+   4. Limitations and Disclaimers.
+
+a. No trademark or patent rights held by Affirmer are waived, abandoned, surrendered,
+licensed or otherwise affected by this document.
+
+b. Affirmer offers the Work as-is and makes no representations or warranties
+of any kind concerning the Work, express, implied, statutory or otherwise,
+including without limitation warranties of title, merchantability, fitness
+for a particular purpose, non infringement, or the absence of latent or other
+defects, accuracy, or the present or absence of errors, whether or not discoverable,
+all to the greatest extent permissible under applicable law.
+
+c. Affirmer disclaims responsibility for clearing rights of other persons
+that may apply to the Work or any use thereof, including without limitation
+any person's Copyright and Related Rights in the Work. Further, Affirmer disclaims
+responsibility for obtaining any necessary consents, permissions or other
+rights required for any use of the Work.
+
+d. Affirmer understands and acknowledges that Creative Commons is not a party
+to this document and has no duty or obligation with respect to this CC0 or
+use of the Work.
diff --git a/include/android/meson.build b/include/android/meson.build
index 69f1c38edada..da2504f2e493 100644
--- a/include/android/meson.build
+++ b/include/android/meson.build
@@ -1,3 +1,5 @@
+# SPDX-License-Identifier: CC0-1.0
+
 android_includes = ([
     include_directories('hardware/libhardware/include/'),
     include_directories('metadata/'),
diff --git a/include/ipa/meson.build b/include/ipa/meson.build
index 695a4183a0e8..3d5c0dd69bb4 100644
--- a/include/ipa/meson.build
+++ b/include/ipa/meson.build
@@ -1,3 +1,5 @@
+# SPDX-License-Identifier: CC0-1.0
+
 libcamera_ipa_api = files([
     'ipa_controls.h',
     'ipa_interface.h',
diff --git a/include/libcamera/meson.build b/include/libcamera/meson.build
index 23c01d3837ba..cea47eb83030 100644
--- a/include/libcamera/meson.build
+++ b/include/libcamera/meson.build
@@ -1,3 +1,5 @@
+# SPDX-License-Identifier: CC0-1.0
+
 libcamera_api = files([
     'bound_method.h',
     'buffer.h',
diff --git a/include/meson.build b/include/meson.build
index 42b2453445b5..4f41c9ceeb4c 100644
--- a/include/meson.build
+++ b/include/meson.build
@@ -1,3 +1,5 @@
+# SPDX-License-Identifier: CC0-1.0
+
 libcamera_include_dir = 'libcamera'
 
 subdir('android')
diff --git a/meson.build b/meson.build
index 59829e1942ca..e898782a28b0 100644
--- a/meson.build
+++ b/meson.build
@@ -1,3 +1,5 @@
+# SPDX-License-Identifier: CC0-1.0
+
 project('libcamera', 'c', 'cpp',
     meson_version : '>= 0.47',
     version : '0.0.0',
diff --git a/meson_options.txt b/meson_options.txt
index 68f4f48004e5..badace151bb6 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -1,3 +1,5 @@
+# SPDX-License-Identifier: CC0-1.0
+
 option('android',
         type : 'boolean',
         value : false,
diff --git a/src/android/meson.build b/src/android/meson.build
index 5a5a332e6a6f..822cad621f01 100644
--- a/src/android/meson.build
+++ b/src/android/meson.build
@@ -1,3 +1,5 @@
+# SPDX-License-Identifier: CC0-1.0
+
 android_hal_sources = files([
     'camera3_hal.cpp',
     'camera_hal_manager.cpp',
diff --git a/src/cam/meson.build b/src/cam/meson.build
index 162d6333f94e..89e124fbae2a 100644
--- a/src/cam/meson.build
+++ b/src/cam/meson.build
@@ -1,3 +1,5 @@
+# SPDX-License-Identifier: CC0-1.0
+
 cam_sources = files([
     'buffer_writer.cpp',
     'capture.cpp',
diff --git a/src/gstreamer/meson.build b/src/gstreamer/meson.build
index e119e472cb58..c9f0c13d969d 100644
--- a/src/gstreamer/meson.build
+++ b/src/gstreamer/meson.build
@@ -1,3 +1,5 @@
+# SPDX-License-Identifier: CC0-1.0
+
 libcamera_gst_sources = [
     'gstlibcamera-utils.cpp',
     'gstlibcamera.cpp',
diff --git a/src/ipa/libipa/meson.build b/src/ipa/libipa/meson.build
index 6f3cd4866ce3..2262640517a0 100644
--- a/src/ipa/libipa/meson.build
+++ b/src/ipa/libipa/meson.build
@@ -1,3 +1,5 @@
+# SPDX-License-Identifier: CC0-1.0
+
 libipa_headers = files([
     'ipa_interface_wrapper.h',
 ])
diff --git a/src/ipa/meson.build b/src/ipa/meson.build
index b103479c1cd0..64deb601054c 100644
--- a/src/ipa/meson.build
+++ b/src/ipa/meson.build
@@ -1,3 +1,5 @@
+# SPDX-License-Identifier: CC0-1.0
+
 ipa_install_dir = join_paths(get_option('libdir'), 'libcamera')
 ipa_data_dir = join_paths(get_option('datadir'), 'libcamera', 'ipa')
 ipa_sysconf_dir = join_paths(get_option('sysconfdir'), 'libcamera', 'ipa')
diff --git a/src/ipa/raspberrypi/meson.build b/src/ipa/raspberrypi/meson.build
index 2dece3a468e8..697902e95bc1 100644
--- a/src/ipa/raspberrypi/meson.build
+++ b/src/ipa/raspberrypi/meson.build
@@ -1,3 +1,5 @@
+# SPDX-License-Identifier: CC0-1.0
+
 ipa_name = 'ipa_rpi'
 
 rpi_ipa_deps = [
diff --git a/src/ipa/rkisp1/meson.build b/src/ipa/rkisp1/meson.build
index d7127ea8d1e9..ed9a6b6b8ec8 100644
--- a/src/ipa/rkisp1/meson.build
+++ b/src/ipa/rkisp1/meson.build
@@ -1,3 +1,5 @@
+# SPDX-License-Identifier: CC0-1.0
+
 ipa_name = 'ipa_rkisp1'
 
 mod = shared_module(ipa_name,
diff --git a/src/ipa/vimc/data/meson.build b/src/ipa/vimc/data/meson.build
index c844926da7f2..6532662cfa94 100644
--- a/src/ipa/vimc/data/meson.build
+++ b/src/ipa/vimc/data/meson.build
@@ -1,3 +1,5 @@
+# SPDX-License-Identifier: CC0-1.0
+
 conf_files = files([
     'vimc.conf',
 ])
diff --git a/src/ipa/vimc/meson.build b/src/ipa/vimc/meson.build
index 22296a029642..8c9df854007a 100644
--- a/src/ipa/vimc/meson.build
+++ b/src/ipa/vimc/meson.build
@@ -1,3 +1,5 @@
+# SPDX-License-Identifier: CC0-1.0
+
 ipa_name = 'ipa_vimc'
 
 mod = shared_module(ipa_name,
diff --git a/src/libcamera/include/meson.build b/src/libcamera/include/meson.build
index 683d06133741..1f6af579cca2 100644
--- a/src/libcamera/include/meson.build
+++ b/src/libcamera/include/meson.build
@@ -1,3 +1,5 @@
+# SPDX-License-Identifier: CC0-1.0
+
 libcamera_headers = files([
     'byte_stream_buffer.h',
     'camera_controls.h',
diff --git a/src/libcamera/meson.build b/src/libcamera/meson.build
index d8b4d7206aba..d42e9720dbd6 100644
--- a/src/libcamera/meson.build
+++ b/src/libcamera/meson.build
@@ -1,3 +1,5 @@
+# SPDX-License-Identifier: CC0-1.0
+
 libcamera_sources = files([
     'bound_method.cpp',
     'buffer.cpp',
diff --git a/src/libcamera/pipeline/ipu3/meson.build b/src/libcamera/pipeline/ipu3/meson.build
index 0ab766a257a0..0e8c5a14f2b3 100644
--- a/src/libcamera/pipeline/ipu3/meson.build
+++ b/src/libcamera/pipeline/ipu3/meson.build
@@ -1,3 +1,5 @@
+# SPDX-License-Identifier: CC0-1.0
+
 libcamera_sources += files([
     'ipu3.cpp',
 ])
diff --git a/src/libcamera/pipeline/meson.build b/src/libcamera/pipeline/meson.build
index 190ca5a8db92..46424493aa37 100644
--- a/src/libcamera/pipeline/meson.build
+++ b/src/libcamera/pipeline/meson.build
@@ -1,3 +1,5 @@
+# SPDX-License-Identifier: CC0-1.0
+
 foreach pipeline : get_option('pipelines')
     subdir(pipeline)
 endforeach
diff --git a/src/libcamera/pipeline/raspberrypi/meson.build b/src/libcamera/pipeline/raspberrypi/meson.build
index 737857977831..fc117b77bdd1 100644
--- a/src/libcamera/pipeline/raspberrypi/meson.build
+++ b/src/libcamera/pipeline/raspberrypi/meson.build
@@ -1,3 +1,5 @@
+# SPDX-License-Identifier: CC0-1.0
+
 libcamera_sources += files([
     'raspberrypi.cpp'
 ])
diff --git a/src/libcamera/pipeline/rkisp1/meson.build b/src/libcamera/pipeline/rkisp1/meson.build
index d04fb45223e7..1ab3964a6db1 100644
--- a/src/libcamera/pipeline/rkisp1/meson.build
+++ b/src/libcamera/pipeline/rkisp1/meson.build
@@ -1,3 +1,5 @@
+# SPDX-License-Identifier: CC0-1.0
+
 libcamera_sources += files([
     'rkisp1.cpp',
     'timeline.cpp',
diff --git a/src/libcamera/pipeline/simple/meson.build b/src/libcamera/pipeline/simple/meson.build
index 8372f24e3788..9c99b32f69f3 100644
--- a/src/libcamera/pipeline/simple/meson.build
+++ b/src/libcamera/pipeline/simple/meson.build
@@ -1,3 +1,5 @@
+# SPDX-License-Identifier: CC0-1.0
+
 libcamera_sources += files([
     'converter.cpp',
     'simple.cpp',
diff --git a/src/libcamera/pipeline/uvcvideo/meson.build b/src/libcamera/pipeline/uvcvideo/meson.build
index c19ae2389f48..a3c2efd424bf 100644
--- a/src/libcamera/pipeline/uvcvideo/meson.build
+++ b/src/libcamera/pipeline/uvcvideo/meson.build
@@ -1,3 +1,5 @@
+# SPDX-License-Identifier: CC0-1.0
+
 libcamera_sources += files([
     'uvcvideo.cpp',
 ])
diff --git a/src/libcamera/pipeline/vimc/meson.build b/src/libcamera/pipeline/vimc/meson.build
index 615ecd20f1a2..290eefb5d076 100644
--- a/src/libcamera/pipeline/vimc/meson.build
+++ b/src/libcamera/pipeline/vimc/meson.build
@@ -1,3 +1,5 @@
+# SPDX-License-Identifier: CC0-1.0
+
 libcamera_sources += files([
     'vimc.cpp',
 ])
diff --git a/src/libcamera/proxy/meson.build b/src/libcamera/proxy/meson.build
index 6c00d5f30ad2..bd804750748a 100644
--- a/src/libcamera/proxy/meson.build
+++ b/src/libcamera/proxy/meson.build
@@ -1,3 +1,5 @@
+# SPDX-License-Identifier: CC0-1.0
+
 libcamera_sources += files([
     'ipa_proxy_linux.cpp',
     'ipa_proxy_thread.cpp',
diff --git a/src/libcamera/proxy/worker/meson.build b/src/libcamera/proxy/worker/meson.build
index 839156f7591a..1b1bee5e0170 100644
--- a/src/libcamera/proxy/worker/meson.build
+++ b/src/libcamera/proxy/worker/meson.build
@@ -1,3 +1,5 @@
+# SPDX-License-Identifier: CC0-1.0
+
 ipa_proxy_sources = [
     ['ipa_proxy_linux', 'ipa_proxy_linux_worker.cpp']
 ]
diff --git a/src/meson.build b/src/meson.build
index c9c1008562b1..d69b4c1ea978 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -1,3 +1,5 @@
+# SPDX-License-Identifier: CC0-1.0
+
 if get_option('android')
     subdir('android')
 endif
diff --git a/src/qcam/meson.build b/src/qcam/meson.build
index 949ef6149c8a..045db52acf26 100644
--- a/src/qcam/meson.build
+++ b/src/qcam/meson.build
@@ -1,3 +1,5 @@
+# SPDX-License-Identifier: CC0-1.0
+
 qcam_sources = files([
     '../cam/options.cpp',
     '../cam/stream_options.cpp',
diff --git a/src/v4l2/meson.build b/src/v4l2/meson.build
index efab968f7729..fc1be82d1b02 100644
--- a/src/v4l2/meson.build
+++ b/src/v4l2/meson.build
@@ -1,3 +1,5 @@
+# SPDX-License-Identifier: CC0-1.0
+
 v4l2_compat_sources = files([
     'v4l2_camera.cpp',
     'v4l2_camera_proxy.cpp',
diff --git a/test/camera/meson.build b/test/camera/meson.build
index e2a6660a7a92..0395e7ddc7a4 100644
--- a/test/camera/meson.build
+++ b/test/camera/meson.build
@@ -1,3 +1,5 @@
+# SPDX-License-Identifier: CC0-1.0
+
 # Tests are listed in order of complexity.
 # They are not alphabetically sorted.
 camera_tests = [
diff --git a/test/controls/meson.build b/test/controls/meson.build
index 7fff2413007e..545fb03b16c6 100644
--- a/test/controls/meson.build
+++ b/test/controls/meson.build
@@ -1,3 +1,5 @@
+# SPDX-License-Identifier: CC0-1.0
+
 control_tests = [
     [ 'control_info',               'control_info.cpp' ],
     [ 'control_info_map',           'control_info_map.cpp' ],
diff --git a/test/ipa/meson.build b/test/ipa/meson.build
index f925c50a085e..ba672f3f9d8b 100644
--- a/test/ipa/meson.build
+++ b/test/ipa/meson.build
@@ -1,3 +1,5 @@
+# SPDX-License-Identifier: CC0-1.0
+
 ipa_test = [
     ['ipa_module_test',     'ipa_module_test.cpp'],
     ['ipa_interface_test',  'ipa_interface_test.cpp'],
diff --git a/test/ipc/meson.build b/test/ipc/meson.build
index cc46b41c7687..650df1d63444 100644
--- a/test/ipc/meson.build
+++ b/test/ipc/meson.build
@@ -1,3 +1,5 @@
+# SPDX-License-Identifier: CC0-1.0
+
 ipc_tests = [
     [ 'unixsocket',  'unixsocket.cpp' ],
 ]
diff --git a/test/libtest/meson.build b/test/libtest/meson.build
index 33565e0eb3b6..481f6d6baa61 100644
--- a/test/libtest/meson.build
+++ b/test/libtest/meson.build
@@ -1,3 +1,5 @@
+# SPDX-License-Identifier: CC0-1.0
+
 libtest_sources = files([
     'buffer_source.cpp',
     'camera_test.cpp',
diff --git a/test/log/meson.build b/test/log/meson.build
index 95f6c1a2ae4a..8cd664e04a00 100644
--- a/test/log/meson.build
+++ b/test/log/meson.build
@@ -1,3 +1,5 @@
+# SPDX-License-Identifier: CC0-1.0
+
 log_test = [
     ['log_api',     'log_api.cpp'],
     ['log_process', 'log_process.cpp'],
diff --git a/test/media_device/meson.build b/test/media_device/meson.build
index 6a0e468434b5..1dfcdd8bd744 100644
--- a/test/media_device/meson.build
+++ b/test/media_device/meson.build
@@ -1,3 +1,5 @@
+# SPDX-License-Identifier: CC0-1.0
+
 lib_mdev_test_sources = files([
     'media_device_test.cpp',
 ])
diff --git a/test/meson.build b/test/meson.build
index 5a45a85effd3..bd7da147c70e 100644
--- a/test/meson.build
+++ b/test/meson.build
@@ -1,3 +1,5 @@
+# SPDX-License-Identifier: CC0-1.0
+
 subdir('libtest')
 
 subdir('camera')
diff --git a/test/pipeline/ipu3/meson.build b/test/pipeline/ipu3/meson.build
index d02927c9af86..d062ecd269f2 100644
--- a/test/pipeline/ipu3/meson.build
+++ b/test/pipeline/ipu3/meson.build
@@ -1,3 +1,5 @@
+# SPDX-License-Identifier: CC0-1.0
+
 ipu3_test = [
     ['ipu3_pipeline_test',            'ipu3_pipeline_test.cpp'],
 ]
diff --git a/test/pipeline/meson.build b/test/pipeline/meson.build
index 157f789ceb25..6e7901fee38f 100644
--- a/test/pipeline/meson.build
+++ b/test/pipeline/meson.build
@@ -1,2 +1,4 @@
+# SPDX-License-Identifier: CC0-1.0
+
 subdir('ipu3')
 subdir('rkisp1')
diff --git a/test/pipeline/rkisp1/meson.build b/test/pipeline/rkisp1/meson.build
index d3f974964fc4..ece147b054e4 100644
--- a/test/pipeline/rkisp1/meson.build
+++ b/test/pipeline/rkisp1/meson.build
@@ -1,3 +1,5 @@
+# SPDX-License-Identifier: CC0-1.0
+
 rkisp1_test = [
     ['rkisp1_pipeline_test',            'rkisp1_pipeline_test.cpp'],
 ]
diff --git a/test/process/meson.build b/test/process/meson.build
index c4d83d6c8b39..c215fa7e6c12 100644
--- a/test/process/meson.build
+++ b/test/process/meson.build
@@ -1,3 +1,5 @@
+# SPDX-License-Identifier: CC0-1.0
+
 process_tests = [
     [ 'process_test',  'process_test.cpp' ],
 ]
diff --git a/test/serialization/meson.build b/test/serialization/meson.build
index d78d92e61887..a9d9cbcb7d80 100644
--- a/test/serialization/meson.build
+++ b/test/serialization/meson.build
@@ -1,3 +1,5 @@
+# SPDX-License-Identifier: CC0-1.0
+
 serialization_tests = [
     [ 'control_serialization',    'control_serialization.cpp' ],
 ]
diff --git a/test/stream/meson.build b/test/stream/meson.build
index 005f4aa4996a..2b9b29a9143b 100644
--- a/test/stream/meson.build
+++ b/test/stream/meson.build
@@ -1,3 +1,5 @@
+# SPDX-License-Identifier: CC0-1.0
+
 stream_tests = [
     [ 'stream_formats', 'stream_formats.cpp' ],
 ]
diff --git a/test/v4l2_subdevice/meson.build b/test/v4l2_subdevice/meson.build
index 0521984b2a78..5f0882ca9772 100644
--- a/test/v4l2_subdevice/meson.build
+++ b/test/v4l2_subdevice/meson.build
@@ -1,3 +1,5 @@
+# SPDX-License-Identifier: CC0-1.0
+
 v4l2_subdevice_tests = [
   [ 'list_formats',             'list_formats.cpp'],
   [ 'test_formats',             'test_formats.cpp'],
diff --git a/test/v4l2_videodevice/meson.build b/test/v4l2_videodevice/meson.build
index 685fcf6d16d7..b4bb30908027 100644
--- a/test/v4l2_videodevice/meson.build
+++ b/test/v4l2_videodevice/meson.build
@@ -1,3 +1,5 @@
+# SPDX-License-Identifier: CC0-1.0
+
 # Tests are listed in order of complexity.
 # They are not alphabetically sorted.
 v4l2_videodevice_tests = [
diff --git a/utils/ipu3/meson.build b/utils/ipu3/meson.build
index 49c45856eea6..88049f589561 100644
--- a/utils/ipu3/meson.build
+++ b/utils/ipu3/meson.build
@@ -1 +1,3 @@
+# SPDX-License-Identifier: CC0-1.0
+
 ipu3_unpack = executable('ipu3-unpack', 'ipu3-unpack.c')
diff --git a/utils/meson.build b/utils/meson.build
index f434c79c0ae3..c3cd9d69f887 100644
--- a/utils/meson.build
+++ b/utils/meson.build
@@ -1 +1,3 @@
+# SPDX-License-Identifier: CC0-1.0
+
 subdir('ipu3')
