aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShulhan <ms@kilabit.info>2026-01-15 17:14:54 +0700
committerShulhan <ms@kilabit.info>2026-01-15 17:26:33 +0700
commit7db8c302e1396eda40cd6a1e57f58ed791448556 (patch)
tree89231c859d728deff0582d276f1b809243b6b2f2
parentb1f8d27c7e22eb5624c56e890e51f0a34c7b9606 (diff)
downloadpakakeh.go-7db8c302e1396eda40cd6a1e57f58ed791448556.tar.xz
all: convert license and copyright to use SPDX identifiers
With help of spdxconv tool [1], we able to bulk update all files license and copyright format to comply with SPDX formats. [1] https://kilabit.info/project/spdxconv/
-rw-r--r--CHANGELOG.adoc7
-rw-r--r--REUSE.toml5
-rw-r--r--_AUR/.SRCINFO.license2
-rw-r--r--_AUR/.gitignore2
-rw-r--r--_AUR/Makefile2
-rw-r--r--_AUR/PKGBUILD2
-rwxr-xr-x_bin/go-bench.sh2
-rwxr-xr-x_bin/go-mod-tip.sh2
-rwxr-xr-x_bin/go-test-coverhtml.sh2
-rwxr-xr-x_bin/go-test-lint.sh2
-rw-r--r--_doc/CHANGELOG_2018-2019.adoc3
-rw-r--r--_doc/CHANGELOG_2020.adoc3
-rw-r--r--_doc/CHANGELOG_2021.adoc3
-rw-r--r--_doc/CHANGELOG_2022.adoc3
-rw-r--r--_doc/CHANGELOG_2023.adoc3
-rw-r--r--_doc/CHANGELOG_2024.adoc3
-rw-r--r--_doc/RFC_2045__MIME_I_FORMAT.adoc3
-rw-r--r--_doc/RFC_2046__MIME_II_MEDIA_TYPES.adoc3
-rw-r--r--_doc/RFC_2049__MIME_V_CONFORMANCE.adoc3
-rw-r--r--_doc/RFC_2183__CONTENT-DISPOSITION.adoc3
-rw-r--r--_doc/RFC_3207__ESMTP_TLS.adoc3
-rw-r--r--_doc/RFC_3461-3464__ESMTP_DSN.adoc3
-rw-r--r--_doc/RFC_4422__SASL.adoc3
-rw-r--r--_doc/RFC_4616__SASL_PLAIN.adoc3
-rw-r--r--_doc/RFC_4685__DKIM_THREATS.adoc3
-rw-r--r--_doc/RFC_4954__ESMTP_AUTH.adoc3
-rw-r--r--_doc/RFC_5321__SMTP.adoc5
-rw-r--r--_doc/RFC_5322__IMF.adoc3
-rw-r--r--_doc/RFC_5585__DKIM_OVERVIEW.adoc3
-rw-r--r--_doc/RFC_5863__DKIM_DEVOPS.adoc3
-rw-r--r--_doc/RFC_6376__DKIM_SIGNATURES.adoc3
-rw-r--r--_doc/RFC_6891_EDNS0.adoc3
-rw-r--r--_doc/RFC_7808__SPFv1.adoc3
-rw-r--r--_doc/RFC_9460__SVCB_and_HTTP_RR.adoc3
-rw-r--r--lib/_hunspell/affix.go5
-rw-r--r--lib/_hunspell/affix_rule.go5
-rw-r--r--lib/_hunspell/affix_rule_test.go5
-rw-r--r--lib/_hunspell/affix_test.go5
-rw-r--r--lib/_hunspell/breakopt.go5
-rw-r--r--lib/_hunspell/charsmap.go5
-rw-r--r--lib/_hunspell/compound_pattern.go5
-rw-r--r--lib/_hunspell/compound_rule.go5
-rw-r--r--lib/_hunspell/compound_syllable.go5
-rw-r--r--lib/_hunspell/conversion.go5
-rw-r--r--lib/_hunspell/dictionary.go5
-rw-r--r--lib/_hunspell/hunspell_test.go5
-rw-r--r--lib/_hunspell/morphemes.go5
-rw-r--r--lib/_hunspell/replacement.go5
-rw-r--r--lib/_hunspell/spell.go5
-rw-r--r--lib/_hunspell/spell_test.go5
-rw-r--r--lib/_hunspell/stem.go5
-rw-r--r--lib/_hunspell/stem_test.go5
-rw-r--r--lib/_hunspell/tests/affixes.aff2
-rw-r--r--lib/_hunspell/tests/alias.aff2
-rw-r--r--lib/_hunspell/tests/alias2.aff2
-rw-r--r--lib/_hunspell/tests/alias3.aff2
-rw-r--r--lib/_hunspell/tests/all_test.go5
-rw-r--r--lib/_hunspell/tests/allcaps.aff2
-rw-r--r--lib/_hunspell/tests/morphology_test.go5
-rw-r--r--lib/ascii/ascii_example_test.go5
-rw-r--r--lib/ascii/ascii_test.go3
-rw-r--r--lib/ascii/benchmark_test.go5
-rw-r--r--lib/ascii/set.go5
-rw-r--r--lib/ascii/set_benchmark_test.go5
-rw-r--r--lib/ascii/set_test.go5
-rw-r--r--lib/bytes/bytes_benchmark_test.go5
-rw-r--r--lib/bytes/parser_test.go3
-rw-r--r--lib/bytes/testdata/Parser_ReadNoSpace_test.txt3
-rw-r--r--lib/bytes/testdata/Parser_Read_test.txt3
-rw-r--r--lib/clise/example_test.go5
-rw-r--r--lib/contact/README.html55
-rw-r--r--lib/contact/README.md3
-rw-r--r--lib/contact/address.go5
-rw-r--r--lib/contact/const.go5
-rw-r--r--lib/contact/contact.go5
-rw-r--r--lib/contact/date.go5
-rw-r--r--lib/contact/email.go5
-rw-r--r--lib/contact/google/address.go5
-rw-r--r--lib/contact/google/author.go5
-rw-r--r--lib/contact/google/birthday.go5
-rw-r--r--lib/contact/google/category.go5
-rw-r--r--lib/contact/google/contact.go5
-rw-r--r--lib/contact/google/contact_test.go5
-rw-r--r--lib/contact/google/email.go5
-rw-r--r--lib/contact/google/event.go5
-rw-r--r--lib/contact/google/eventtime.go5
-rw-r--r--lib/contact/google/feed.go5
-rw-r--r--lib/contact/google/gd.go5
-rw-r--r--lib/contact/google/generator.go5
-rw-r--r--lib/contact/google/google.go5
-rw-r--r--lib/contact/google/google_test.go5
-rw-r--r--lib/contact/google/link.go5
-rw-r--r--lib/contact/google/name.go5
-rw-r--r--lib/contact/google/org.go5
-rw-r--r--lib/contact/google/phone.go5
-rw-r--r--lib/contact/google/root.go5
-rw-r--r--lib/contact/google/testdata/contact.json.license2
-rw-r--r--lib/contact/google/testdata/contacts.json.license2
-rw-r--r--lib/contact/google/util.go5
-rw-r--r--lib/contact/microsoft/address.go5
-rw-r--r--lib/contact/microsoft/contact.go5
-rw-r--r--lib/contact/microsoft/email.go5
-rw-r--r--lib/contact/microsoft/microsoft.go5
-rw-r--r--lib/contact/microsoft/microsoft_test.go5
-rw-r--r--lib/contact/microsoft/root.go5
-rw-r--r--lib/contact/microsoft/testdata/contacts.json.license2
-rw-r--r--lib/contact/name.go5
-rw-r--r--lib/contact/phone.go5
-rw-r--r--lib/contact/vcard/gender.go5
-rw-r--r--lib/contact/vcard/geolocation.go5
-rw-r--r--lib/contact/vcard/messaging.go5
-rw-r--r--lib/contact/vcard/relation.go5
-rw-r--r--lib/contact/vcard/resource.go5
-rw-r--r--lib/contact/vcard/vcard.go5
-rw-r--r--lib/contact/yahoo/category.go5
-rw-r--r--lib/contact/yahoo/contact.go5
-rw-r--r--lib/contact/yahoo/contact_test.go5
-rw-r--r--lib/contact/yahoo/contacts.go5
-rw-r--r--lib/contact/yahoo/contacts_test.go5
-rw-r--r--lib/contact/yahoo/meta.go5
-rw-r--r--lib/contact/yahoo/meta2.go5
-rw-r--r--lib/contact/yahoo/root.go5
-rw-r--r--lib/contact/yahoo/testdata/contact.json.license2
-rw-r--r--lib/contact/yahoo/testdata/contacts.json.license2
-rw-r--r--lib/contact/yahoo/yahoo.go5
-rw-r--r--lib/crypto/crypto_example_test.go3
-rw-r--r--lib/crypto/crypto_test.go3
-rwxr-xr-xlib/crypto/testdata/askpass.sh2
-rw-r--r--lib/crypto/testdata/encrypt_oaep_test.txt3
-rw-r--r--lib/debug/cpu_profile.go5
-rw-r--r--lib/debug/debug.go5
-rw-r--r--lib/debug/memheap.go5
-rw-r--r--lib/debug/pprof.go5
-rw-r--r--lib/dns/answer.go5
-rw-r--r--lib/dns/answer_test.go5
-rw-r--r--lib/dns/answers_test.go5
-rw-r--r--lib/dns/client.go5
-rw-r--r--lib/dns/dns.go5
-rw-r--r--lib/dns/dns_test.go5
-rw-r--r--lib/dns/doh_client_test.go5
-rw-r--r--lib/dns/dot_client_test.go5
-rw-r--r--lib/dns/error.go5
-rw-r--r--lib/dns/funcs.go5
-rw-r--r--lib/dns/funcs_test.go5
-rw-r--r--lib/dns/hosts_file.go5
-rw-r--r--lib/dns/hosts_file_example_test.go5
-rw-r--r--lib/dns/hosts_file_test.go5
-rw-r--r--lib/dns/idpool.go5
-rw-r--r--lib/dns/idpool_test.go5
-rw-r--r--lib/dns/message_header_bench_test.go5
-rw-r--r--lib/dns/message_header_test.go5
-rw-r--r--lib/dns/message_question_bench_test.go5
-rw-r--r--lib/dns/message_question_test.go5
-rw-r--r--lib/dns/rdata_https.go5
-rw-r--r--lib/dns/rdata_minfo.go5
-rw-r--r--lib/dns/rdata_mx.go5
-rw-r--r--lib/dns/rdata_opt_var.go5
-rw-r--r--lib/dns/rdata_soa.go5
-rw-r--r--lib/dns/rdata_srv.go5
-rw-r--r--lib/dns/rdata_wks.go5
-rw-r--r--lib/dns/record_class.go5
-rw-r--r--lib/dns/record_type.go5
-rw-r--r--lib/dns/record_type_example_test.go5
-rw-r--r--lib/dns/record_type_test.go5
-rw-r--r--lib/dns/request.go5
-rw-r--r--lib/dns/resource_record_test.go3
-rw-r--r--lib/dns/server_example_test.go5
-rw-r--r--lib/dns/server_options.go5
-rw-r--r--lib/dns/server_options_test.go5
-rw-r--r--lib/dns/tcp_client_example_test.go5
-rw-r--r--lib/dns/tcp_client_test.go5
-rw-r--r--lib/dns/testdata/ParseZone_SVCB_test.txt3
-rw-r--r--lib/dns/testdata/message/UnpackHeaderQuestion_test.txt3
-rw-r--r--lib/dns/testdata/message/UnpackMessage_HTTPS_test.txt2
-rw-r--r--lib/dns/testdata/message/UnpackMessage_OPT_test.txt3
-rw-r--r--lib/dns/testdata/message/UnpackMessage_SVCB_test.txt3
-rw-r--r--lib/dns/testdata/message/add_authority_test.txt3
-rw-r--r--lib/dns/testdata/zone/kilabit_info_test.txt3
-rw-r--r--lib/dns/testdata/zone/pcguide_test.txt3
-rw-r--r--lib/dns/testdata/zone/rfc1035_test.txt3
-rw-r--r--lib/dns/testdata/zone/rfc2782_srv_test.txt3
-rw-r--r--lib/dns/testdata/zone/windows_test.txt3
-rw-r--r--lib/dns/testdata/zone/with_soa_test.txt3
-rw-r--r--lib/dns/testdata/zone/without_soa_test.txt3
-rw-r--r--lib/dns/testdata/zoneParser_next_test.txt2
-rw-r--r--lib/dns/testdata/zone_soa_test.txt3
-rw-r--r--lib/dns/udp_client.go5
-rw-r--r--lib/dns/udp_client_example_test.go5
-rw-r--r--lib/dns/udp_client_test.go5
-rw-r--r--lib/dns/zone.go5
-rw-r--r--lib/dns/zone_parser_test.go3
-rw-r--r--lib/dsv/README.html365
-rw-r--r--lib/dsv/README.md3
-rw-r--r--lib/dsv/claset_test.go4
-rw-r--r--lib/dsv/common_test.go4
-rw-r--r--lib/dsv/config.go4
-rw-r--r--lib/dsv/data_test.go4
-rw-r--r--lib/dsv/dsv_test.go4
-rw-r--r--lib/dsv/metadata.go4
-rw-r--r--lib/dsv/metadata_test.go4
-rw-r--r--lib/dsv/metadatainterface.go4
-rw-r--r--lib/dsv/readererror.go4
-rw-r--r--lib/dsv/writer.go4
-rw-r--r--lib/dsv/writer_test.go4
-rw-r--r--lib/dsv/writerinterface.go4
-rw-r--r--lib/email/body_test.go5
-rw-r--r--lib/email/contenttype_example_test.go5
-rw-r--r--lib/email/contenttype_test.go5
-rw-r--r--lib/email/dkim/canon.go5
-rw-r--r--lib/email/dkim/dkim.go5
-rw-r--r--lib/email/dkim/dkim_test.go5
-rw-r--r--lib/email/dkim/dns.go5
-rw-r--r--lib/email/dkim/dns_test.go5
-rw-r--r--lib/email/dkim/doc.go5
-rw-r--r--lib/email/dkim/func_test.go5
-rw-r--r--lib/email/dkim/hashalg_test.go5
-rw-r--r--lib/email/dkim/key.go5
-rw-r--r--lib/email/dkim/key_test.go5
-rw-r--r--lib/email/dkim/keypool.go5
-rw-r--r--lib/email/dkim/keypool_test.go5
-rw-r--r--lib/email/dkim/keytype.go5
-rw-r--r--lib/email/dkim/parser.go5
-rw-r--r--lib/email/dkim/querymethod.go5
-rw-r--r--lib/email/dkim/queryoption.go5
-rw-r--r--lib/email/dkim/querytype.go5
-rw-r--r--lib/email/dkim/signalg.go5
-rw-r--r--lib/email/dkim/signature_test.go5
-rw-r--r--lib/email/dkim/status.go5
-rw-r--r--lib/email/dkim/statustype.go5
-rw-r--r--lib/email/dkim/tag_test.go5
-rw-r--r--lib/email/doc.go5
-rw-r--r--lib/email/email.go5
-rw-r--r--lib/email/email_test.go5
-rw-r--r--lib/email/field_test.go5
-rw-r--r--lib/email/fieldtype.go5
-rw-r--r--lib/email/header.go5
-rw-r--r--lib/email/header_example_test.go3
-rw-r--r--lib/email/header_test.go5
-rw-r--r--lib/email/is_benchmark_test.go3
-rw-r--r--lib/email/is_test.go5
-rw-r--r--lib/email/mailbox.go5
-rw-r--r--lib/email/mailbox_example_test.go5
-rw-r--r--lib/email/mailbox_test.go5
-rw-r--r--lib/email/maildir/filename.go5
-rw-r--r--lib/email/maildir/filename_test.go5
-rw-r--r--lib/email/maildir/folder.go5
-rw-r--r--lib/email/maildir/folder_darwin_test.go5
-rw-r--r--lib/email/maildir/folder_linux_test.go5
-rw-r--r--lib/email/maildir/folder_test.go5
-rw-r--r--lib/email/maildir/maildir.go5
-rw-r--r--lib/email/maildir/maildir_test.go5
-rw-r--r--lib/email/maildir/manager.go5
-rw-r--r--lib/email/maildir/manager_darwin_test.go3
-rw-r--r--lib/email/maildir/manager_linux_test.go3
-rw-r--r--lib/email/maildir/manager_test.go5
-rw-r--r--lib/email/message_test.go5
-rw-r--r--lib/email/mime.go5
-rw-r--r--lib/email/mime_test.go5
-rw-r--r--lib/email/param.go5
-rw-r--r--lib/email/testdata/message_newmultipart_test.txt3
-rw-r--r--lib/email/testdata/message_packsingle_test.txt2
-rw-r--r--lib/email/testdata/message_quoted-printable_test.txt3
-rw-r--r--lib/email/testdata/message_setbodytext_test.txt2
-rw-r--r--lib/errors/errors_example_test.go3
-rw-r--r--lib/git/git_test.go11
-rw-r--r--lib/git/testdata/IsIgnored/a/b/.gitignore2
-rw-r--r--lib/html/benchmark_test.go5
-rw-r--r--lib/html/example_node_iterator_test.go5
-rw-r--r--lib/html/example_test.go5
-rw-r--r--lib/html/html.go5
-rw-r--r--lib/html/node.go5
-rw-r--r--lib/html/node_iterator.go5
-rw-r--r--lib/http/callback.go5
-rw-r--r--lib/http/callback_error_handler.go5
-rw-r--r--lib/http/client_example_test.go3
-rw-r--r--lib/http/client_options.go3
-rw-r--r--lib/http/client_request.go5
-rw-r--r--lib/http/client_response.go3
-rw-r--r--lib/http/client_test.go5
-rw-r--r--lib/http/download_request.go5
-rw-r--r--lib/http/endpoint_example_test.go5
-rw-r--r--lib/http/endpoint_request.go5
-rw-r--r--lib/http/endpoint_response_example_test.go5
-rw-r--r--lib/http/endpoint_response_test.go5
-rw-r--r--lib/http/evaluator.go5
-rw-r--r--lib/http/form_example_test.go3
-rw-r--r--lib/http/form_test.go3
-rw-r--r--lib/http/fs_handler.go7
-rw-r--r--lib/http/http.go5
-rw-r--r--lib/http/http_example_test.go5
-rw-r--r--lib/http/http_test.go5
-rw-r--r--lib/http/multipart_form.go5
-rw-r--r--lib/http/multipart_form_test.go5
-rw-r--r--lib/http/range.go3
-rw-r--r--lib/http/range_example_test.go3
-rw-r--r--lib/http/range_position.go3
-rw-r--r--lib/http/range_position_example_test.go3
-rw-r--r--lib/http/range_position_test.go3
-rw-r--r--lib/http/range_test.go3
-rw-r--r--lib/http/request_method.go5
-rw-r--r--lib/http/request_type.go5
-rw-r--r--lib/http/request_type_test.go5
-rw-r--r--lib/http/response.go5
-rw-r--r--lib/http/response_type_test.go5
-rw-r--r--lib/http/route.go5
-rw-r--r--lib/http/server_benchmark_test.go3
-rw-r--r--lib/http/server_options.go5
-rw-r--r--lib/http/sse_conn.go5
-rw-r--r--lib/http/sse_endpoint.go5
-rw-r--r--lib/http/sse_endpoint_test.go5
-rw-r--r--lib/http/sseclient/event.go5
-rw-r--r--lib/http/sseclient/sseclient_test.go5
-rw-r--r--lib/http/testdata/GenerateFormData_test.txt2
-rw-r--r--lib/http/testdata/Server_HandleFS_test.txt2
-rw-r--r--lib/http/testdata/auth/index.html.license2
-rw-r--r--lib/http/testdata/auth/sub/index.html.license2
-rw-r--r--lib/http/testdata/handleDelete_test.txt3
-rw-r--r--lib/http/testdata/index.html.license2
-rw-r--r--lib/http/testdata/index.js.license2
-rw-r--r--lib/http/testdata/range/invalid_boundary_test.txt3
-rw-r--r--lib/http/testdata/range/missing_last_boundary_test.txt3
-rw-r--r--lib/http/testdata/range/ok_test.txt3
-rw-r--r--lib/http/testdata/server/head_range_test.txt3
-rw-r--r--lib/http/testdata/server/range/empty_test.txt3
-rw-r--r--lib/http/testdata/server/range/fail_416_test.txt3
-rw-r--r--lib/http/testdata/server/range/fail_unit_test.txt3
-rw-r--r--lib/http/testdata/server/range/multipart_test.txt3
-rw-r--r--lib/http/testdata/server/range/single_test.txt3
-rw-r--r--lib/http/testdata/server/range_big_test.txt2
-rw-r--r--lib/ini/BENCHMARK.adoc6
-rw-r--r--lib/ini/benchmark_test.go5
-rw-r--r--lib/ini/common.go5
-rw-r--r--lib/ini/common_example_test.go3
-rw-r--r--lib/ini/doc.go5
-rw-r--r--lib/ini/ini_example_test.go3
-rw-r--r--lib/ini/ini_unmarshal.go5
-rw-r--r--lib/ini/linemode.go5
-rw-r--r--lib/ini/section_test.go5
-rw-r--r--lib/ini/struct_field.go5
-rw-r--r--lib/ini/testdata/get_complex_test.txt3
-rw-r--r--lib/ini/testdata/get_test.txt3
-rw-r--r--lib/ini/testdata/struct/embedded_test.txt3
-rw-r--r--lib/ini/testdata/struct/map_test.txt3
-rw-r--r--lib/ini/testdata/struct/slice_of_pointer_test.txt3
-rw-r--r--lib/ini/testdata/struct/slice_of_primitive_test.txt3
-rw-r--r--lib/ini/testdata/struct/slice_of_struct_test.txt3
-rw-r--r--lib/ini/testdata/struct/struct_test.txt3
-rw-r--r--lib/ini/variable.go5
-rw-r--r--lib/ini/variable_test.go5
-rw-r--r--lib/math/big/big.go5
-rw-r--r--lib/math/big/rat_test.go5
-rw-r--r--lib/math/math.go5
-rw-r--r--lib/math/math_test.go5
-rw-r--r--lib/memfs/.gitignore2
-rw-r--r--lib/memfs/embed.go5
-rw-r--r--lib/memfs/embed_options.go5
-rw-r--r--lib/memfs/embed_test.go4
-rw-r--r--lib/memfs/internal/test/embed_disable_modtime/embed_test.go8
-rw-r--r--lib/memfs/internal/test/embed_disable_modtime/memfs_embed_test.go5
-rw-r--r--lib/memfs/memfs_test.go5
-rw-r--r--lib/memfs/options.go5
-rw-r--r--lib/memfs/options_test.go5
-rw-r--r--lib/memfs/pathnode.go5
-rw-r--r--lib/memfs/search_result.go3
-rw-r--r--lib/memfs/template.go5
-rw-r--r--lib/mining/README.html63
-rw-r--r--lib/mining/README.md3
-rw-r--r--lib/mining/classifier/cart/cart_test.go5
-rw-r--r--lib/mining/classifier/classifier.go5
-rw-r--r--lib/mining/classifier/cm_test.go5
-rw-r--r--lib/mining/classifier/crf/crf_test.go5
-rw-r--r--lib/mining/classifier/rf/rf.go5
-rw-r--r--lib/mining/classifier/rf/rf_bench_test.go5
-rw-r--r--lib/mining/classifier/rf/rf_test.go5
-rw-r--r--lib/mining/classifier/runtime.go5
-rw-r--r--lib/mining/classifier/stat.go4
-rw-r--r--lib/mining/classifier/stats.go5
-rw-r--r--lib/mining/dict.go5
-rw-r--r--lib/mining/gain/gini/gini_test.go5
-rw-r--r--lib/mining/gain/gini/ginifloat.go5
-rw-r--r--lib/mining/knn/knn.go5
-rw-r--r--lib/mining/knn/knn_test.go5
-rw-r--r--lib/mining/knn/neighbor.go5
-rw-r--r--lib/mining/knn/neighbor_test.go5
-rw-r--r--lib/mining/mining.go5
-rw-r--r--lib/mining/resampling/interface.go5
-rw-r--r--lib/mining/resampling/lnsmote/lnsmote_test.go5
-rw-r--r--lib/mining/resampling/lnsmote/phoneme_lnsmote.dsv.license2
-rw-r--r--lib/mining/resampling/smote/phoneme_smote.dsv.license2
-rw-r--r--lib/mining/resampling/smote/smote_test.go5
-rw-r--r--lib/mining/tree/binary/binary.go5
-rw-r--r--lib/mining/tree/binary/binary_test.go5
-rw-r--r--lib/mlog/benchmark_test.go5
-rw-r--r--lib/mlog/example_test.go5
-rw-r--r--lib/mlog/named_writer.go5
-rw-r--r--lib/net/is.go3
-rw-r--r--lib/net/is_test.go3
-rw-r--r--lib/net/net_test.go5
-rw-r--r--lib/net/parser.go5
-rw-r--r--lib/net/parser_test.go5
-rw-r--r--lib/net/poll.go5
-rw-r--r--lib/net/poll_event.go5
-rw-r--r--lib/net/poll_event_bsd.go5
-rw-r--r--lib/net/poll_event_linux.go5
-rw-r--r--lib/net/resolvconf.go5
-rw-r--r--lib/net/resolvconf_example_test.go5
-rw-r--r--lib/net/resolvconf_test.go5
-rw-r--r--lib/numbers/float64.go5
-rw-r--r--lib/numbers/float64_test.go5
-rw-r--r--lib/numbers/int.go5
-rw-r--r--lib/numbers/int64.go5
-rw-r--r--lib/numbers/int64_test.go5
-rw-r--r--lib/numbers/int_test.go5
-rw-r--r--lib/os/exec/exec.go5
-rw-r--r--lib/os/exec/exec_test.go5
-rw-r--r--lib/os/extract_test.go5
-rw-r--r--lib/os/os_unix_test.go5
-rw-r--r--lib/paseto/example_local_mode_test.go3
-rw-r--r--lib/paseto/json_token.go5
-rw-r--r--lib/paseto/json_token_test.go5
-rw-r--r--lib/paseto/key.go5
-rw-r--r--lib/paseto/keys.go5
-rw-r--r--lib/paseto/local_mode.go5
-rw-r--r--lib/paseto/paseto_test.go5
-rw-r--r--lib/paseto/public_mode_test.go5
-rw-r--r--lib/paseto/public_token.go5
-rw-r--r--lib/path/path.go5
-rw-r--r--lib/path/route.go5
-rw-r--r--lib/path/route_example_test.go5
-rw-r--r--lib/path/route_node.go5
-rw-r--r--lib/path/route_test.go5
-rw-r--r--lib/play/testdata/.gitignore2
-rw-r--r--lib/play/testdata/unsafe_run/cmd/forum/main.go3
-rw-r--r--lib/play/testdata/unsafe_run/forum/forum.go3
-rw-r--r--lib/play/testdata/unsafe_run/go.mod3
-rw-r--r--lib/runes/runes_example_test.go5
-rw-r--r--lib/runes/runes_test.go5
-rw-r--r--lib/smtp/client_options.go5
-rw-r--r--lib/smtp/client_test.go5
-rw-r--r--lib/smtp/command.go5
-rw-r--r--lib/smtp/command_test.go5
-rw-r--r--lib/smtp/dkimoptions.go5
-rw-r--r--lib/smtp/doc.go7
-rw-r--r--lib/smtp/domain.go5
-rw-r--r--lib/smtp/environment.go5
-rw-r--r--lib/smtp/error.go5
-rw-r--r--lib/smtp/extension.go5
-rw-r--r--lib/smtp/extension_dsn.go5
-rw-r--r--lib/smtp/handler.go5
-rw-r--r--lib/smtp/localhandler.go5
-rw-r--r--lib/smtp/localstorage.go5
-rw-r--r--lib/smtp/localstorage_test.go5
-rw-r--r--lib/smtp/mail_tx.go5
-rw-r--r--lib/smtp/mail_tx_example_test.go5
-rw-r--r--lib/smtp/mail_tx_test.go5
-rw-r--r--lib/smtp/mailbox.go5
-rw-r--r--lib/smtp/receiver.go5
-rw-r--r--lib/smtp/response.go5
-rw-r--r--lib/smtp/response_test.go5
-rw-r--r--lib/smtp/sasl_mechanism.go5
-rw-r--r--lib/smtp/server.go5
-rw-r--r--lib/smtp/serverinfo.go5
-rw-r--r--lib/smtp/smtp_example_test.go5
-rw-r--r--lib/smtp/smtp_test.go5
-rw-r--r--lib/smtp/storage.go5
-rw-r--r--lib/smtp/testdata/client_live_test.txt4
-rw-r--r--lib/spf/directive.go5
-rw-r--r--lib/spf/macro_test.go5
-rw-r--r--lib/spf/modifier.go5
-rw-r--r--lib/spf/spf.go5
-rw-r--r--lib/sql/client.go5
-rw-r--r--lib/sql/client_options.go5
-rw-r--r--lib/sql/dml_kind.go5
-rw-r--r--lib/sql/meta.go5
-rw-r--r--lib/sql/meta_example_test.go5
-rw-r--r--lib/sql/meta_test.go3
-rw-r--r--lib/sql/sql.go5
-rw-r--r--lib/ssh/client_test.go5
-rw-r--r--lib/ssh/sftp/client.go5
-rw-r--r--lib/ssh/sftp/client_test.go5
-rw-r--r--lib/ssh/sftp/dir_entry.go5
-rw-r--r--lib/ssh/sftp/extensions.go5
-rw-r--r--lib/ssh/sftp/file_attrs_test.go5
-rw-r--r--lib/ssh/sftp/file_handle.go5
-rw-r--r--lib/ssh/sftp/packet.go5
-rw-r--r--lib/ssh/sftp/sftp.go5
-rw-r--r--lib/ssh/sftp/sftp_test.go3
-rw-r--r--lib/ssh/ssh.go5
-rw-r--r--lib/sshconfig/config_test.go5
-rw-r--r--lib/sshconfig/match_criteria.go5
-rw-r--r--lib/sshconfig/parser_test.go5
-rw-r--r--lib/sshconfig/pattern.go5
-rw-r--r--lib/sshconfig/permitted_cnames.go5
-rw-r--r--lib/sshconfig/section.go5
-rw-r--r--lib/sshconfig/section_match_test.go5
-rw-r--r--lib/sshconfig/section_test.go5
-rw-r--r--lib/sshconfig/testdata/config_get_test.txt3
-rw-r--r--lib/sshconfig/testdata/config_merge_test.txt3
-rw-r--r--lib/strings/parser.go5
-rw-r--r--lib/strings/parser_benchmark_test.go5
-rw-r--r--lib/strings/parser_example_test.go5
-rw-r--r--lib/strings/row_example_test.go5
-rw-r--r--lib/strings/row_test.go5
-rw-r--r--lib/strings/statistic.go5
-rw-r--r--lib/strings/statistic_example_test.go5
-rw-r--r--lib/strings/statistic_test.go5
-rw-r--r--lib/strings/string.go5
-rw-r--r--lib/strings/string_example_test.go5
-rw-r--r--lib/strings/string_test.go5
-rw-r--r--lib/strings/strings_example_test.go5
-rw-r--r--lib/strings/strings_test.go5
-rw-r--r--lib/strings/table_example_test.go5
-rw-r--r--lib/strings/table_test.go5
-rw-r--r--lib/strings/testdata/clean_uri_test.txt3
-rw-r--r--lib/strings/testdata/clean_wiki_markup_test.txt3
-rw-r--r--lib/strings/testdata/split_test.txt3
-rw-r--r--lib/strings/wikimarkup.go5
-rw-r--r--lib/tabula/Makefile6
-rw-r--r--lib/tabula/README.html177
-rw-r--r--lib/tabula/README.md3
-rw-r--r--lib/tabula/clasetinterface.go4
-rw-r--r--lib/tabula/column_test.go4
-rw-r--r--lib/tabula/columns_test.go4
-rw-r--r--lib/tabula/dataset_bench_test.go4
-rw-r--r--lib/tabula/dataset_test.go4
-rw-r--r--lib/tabula/maprows.go4
-rw-r--r--lib/tabula/maprows_test.go4
-rw-r--r--lib/tabula/matrix.go4
-rw-r--r--lib/tabula/record_test.go4
-rw-r--r--lib/tabula/records_test.go4
-rw-r--r--lib/tabula/row_test.go4
-rw-r--r--lib/tabula/rows.go4
-rw-r--r--lib/tabula/rows_test.go4
-rw-r--r--lib/tabula/tabula.go4
-rw-r--r--lib/tabula/tabula_test.go4
-rw-r--r--lib/telemetry/agent.go5
-rw-r--r--lib/telemetry/agent_options.go5
-rw-r--r--lib/telemetry/buffer_forwarder.go5
-rw-r--r--lib/telemetry/buffer_forwarder_example_test.go5
-rw-r--r--lib/telemetry/collector.go5
-rw-r--r--lib/telemetry/context.go5
-rw-r--r--lib/telemetry/file_forwarder.go5
-rw-r--r--lib/telemetry/formatter.go5
-rw-r--r--lib/telemetry/forwarder.go5
-rw-r--r--lib/telemetry/go_memstats_collector.go5
-rw-r--r--lib/telemetry/go_metrics_collector.go5
-rw-r--r--lib/telemetry/ilp_formatter_test.go5
-rw-r--r--lib/telemetry/metadata.go5
-rw-r--r--lib/telemetry/metadata_example_test.go5
-rw-r--r--lib/telemetry/metric.go5
-rw-r--r--lib/telemetry/questdb_forwarder.go5
-rw-r--r--lib/telemetry/questdb_options.go5
-rw-r--r--lib/telemetry/stdout_forwarder.go5
-rw-r--r--lib/telemetry/telemetry.go5
-rw-r--r--lib/telemetry/timestamper.go5
-rw-r--r--lib/test/buffer_writer.go5
-rw-r--r--lib/test/data_test.go5
-rw-r--r--lib/test/example_test.go5
-rw-r--r--lib/test/httptest/httptest_test.go3
-rw-r--r--lib/test/httptest/simulate_request.go3
-rw-r--r--lib/test/httptest/simulate_result.go3
-rw-r--r--lib/test/httptest/simulate_result_test.go3
-rw-r--r--lib/test/mock/mock.go5
-rw-r--r--lib/test/mock/rand_reader.go5
-rw-r--r--lib/test/mock/readwriter.go3
-rw-r--r--lib/test/mock/readwriter_test.go3
-rw-r--r--lib/test/testdata/data1_test.txt3
-rw-r--r--lib/test/testdata/data2_test.txt3
-rw-r--r--lib/test/writer.go5
-rw-r--r--lib/text/chunk_test.go3
-rw-r--r--lib/text/chunks.go5
-rw-r--r--lib/text/diff/diff.go5
-rw-r--r--lib/text/diff/diff_test.go5
-rw-r--r--lib/text/diff/diffinterface.go5
-rw-r--r--lib/text/diff/linechange.go5
-rw-r--r--lib/text/diff/linechanges.go5
-rw-r--r--lib/text/line.go5
-rw-r--r--lib/text/line_test.go3
-rw-r--r--lib/text/lines.go5
-rw-r--r--lib/text/lines_test.go5
-rw-r--r--lib/text/text.go5
-rw-r--r--lib/time/clock.go5
-rw-r--r--lib/time/clock_example_test.go3
-rw-r--r--lib/time/clock_test.go5
-rw-r--r--lib/time/duration.go5
-rw-r--r--lib/time/duration_bench_test.go5
-rw-r--r--lib/time/duration_test.go5
-rw-r--r--lib/time/scheduler.go5
-rw-r--r--lib/time/scheduler_example_test.go3
-rw-r--r--lib/time/scheduler_test.go5
-rw-r--r--lib/time/time.go5
-rw-r--r--lib/time/time_example_test.go5
-rw-r--r--lib/time/time_test.go5
593 files changed, 1314 insertions, 1945 deletions
diff --git a/CHANGELOG.adoc b/CHANGELOG.adoc
index ced0db0a..70cd61b5 100644
--- a/CHANGELOG.adoc
+++ b/CHANGELOG.adoc
@@ -66,6 +66,13 @@ The first line in test data file may contains line prefixed with "//"
as comment.
The use case is for license and copyright lines.
+**💧 all: convert license and copyright to use SPDX identifiers**
+
+With help of spdxconv tool [1], we able to bulk update all files license
+and copyright format to comply with SPDX formats.
+
+[1] https://kilabit.info/project/spdxconv/
+
//}}}
//{{{
[#v0_60_2]
diff --git a/REUSE.toml b/REUSE.toml
index 7c59544e..0b651d3f 100644
--- a/REUSE.toml
+++ b/REUSE.toml
@@ -4,6 +4,9 @@
version = 1
[[annotations]]
-path = ["lib/text/diff/testdata/**"]
+path = [
+ "**/testdata/**",
+ "lib/_hunspell/tests/**",
+]
SPDX-FileCopyrightText = "2018 Shulhan <ms@kilabit.info>"
SPDX-License-Identifier = "BSD-3-Clause"
diff --git a/_AUR/.SRCINFO.license b/_AUR/.SRCINFO.license
new file mode 100644
index 00000000..e96cbd26
--- /dev/null
+++ b/_AUR/.SRCINFO.license
@@ -0,0 +1,2 @@
+SPDX-License-Identifier: BSD-3-Clause
+SPDX-FileCopyrightText: 2022 M. Shulhan <ms@kilabit.info>
diff --git a/_AUR/.gitignore b/_AUR/.gitignore
index 63f96df6..c7f29df9 100644
--- a/_AUR/.gitignore
+++ b/_AUR/.gitignore
@@ -1,3 +1,5 @@
+# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-FileCopyrightText: 2024 M. Shulhan <ms@kilabit.info>
/pakakeh.go-tools
/pakakeh.go-tools-local
/pkg
diff --git a/_AUR/Makefile b/_AUR/Makefile
index d33714bc..f2340a00 100644
--- a/_AUR/Makefile
+++ b/_AUR/Makefile
@@ -1,3 +1,5 @@
+# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-FileCopyrightText: 2023 M. Shulhan <ms@kilabit.info>
.PHONY: release
release:
diff --git a/_AUR/PKGBUILD b/_AUR/PKGBUILD
index 337c7105..f29e0a2d 100644
--- a/_AUR/PKGBUILD
+++ b/_AUR/PKGBUILD
@@ -1,3 +1,5 @@
+# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-FileCopyrightText: 2022 M. Shulhan <ms@kilabit.info>
# Maintainer: shulhan <ms@kilabit.info>
pkgname=pakakeh.go-tools
diff --git a/_bin/go-bench.sh b/_bin/go-bench.sh
index c3c9518c..4dcde4de 100755
--- a/_bin/go-bench.sh
+++ b/_bin/go-bench.sh
@@ -1,4 +1,6 @@
#!/bin/sh
+# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-FileCopyrightText: 2022 M. Shulhan <ms@kilabit.info>
## Script to run Go benchmark in the current package.
##
diff --git a/_bin/go-mod-tip.sh b/_bin/go-mod-tip.sh
index 606f319a..c0d9d9e7 100755
--- a/_bin/go-mod-tip.sh
+++ b/_bin/go-mod-tip.sh
@@ -1,4 +1,6 @@
#!/bin/sh
+# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-FileCopyrightText: 2022 M. Shulhan <ms@kilabit.info>
## Script to get and print the latest Go module version based on the last tag
## and the latest commit hash from current working git directory.
diff --git a/_bin/go-test-coverhtml.sh b/_bin/go-test-coverhtml.sh
index 983b2daf..b3349acb 100755
--- a/_bin/go-test-coverhtml.sh
+++ b/_bin/go-test-coverhtml.sh
@@ -1,4 +1,6 @@
#!/bin/sh
+# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-FileCopyrightText: 2022 M. Shulhan <ms@kilabit.info>
usage() {
cat << EOF
diff --git a/_bin/go-test-lint.sh b/_bin/go-test-lint.sh
index e720486f..e56d8dd5 100755
--- a/_bin/go-test-lint.sh
+++ b/_bin/go-test-lint.sh
@@ -1,4 +1,6 @@
#!/bin/sh
+# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-FileCopyrightText: 2023 M. Shulhan <ms@kilabit.info>
## Script go-test-lint.sh run Go test and if its success it will run
## predefined linter, in the current directory.
diff --git a/_doc/CHANGELOG_2018-2019.adoc b/_doc/CHANGELOG_2018-2019.adoc
index 4685cf2f..15cc3700 100644
--- a/_doc/CHANGELOG_2018-2019.adoc
+++ b/_doc/CHANGELOG_2018-2019.adoc
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2022 M. Shulhan <ms@kilabit.info>
+
= Changelog from 2018 to 2019
Shulhan <ms@kilabit.info>
3 July 2022
diff --git a/_doc/CHANGELOG_2020.adoc b/_doc/CHANGELOG_2020.adoc
index 6101e91d..f679f59d 100644
--- a/_doc/CHANGELOG_2020.adoc
+++ b/_doc/CHANGELOG_2020.adoc
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2022 M. Shulhan <ms@kilabit.info>
+
= Changelog 2020
Shulhan <ms@kilabit.info>
3 July 2022
diff --git a/_doc/CHANGELOG_2021.adoc b/_doc/CHANGELOG_2021.adoc
index f33a3931..2e855d81 100644
--- a/_doc/CHANGELOG_2021.adoc
+++ b/_doc/CHANGELOG_2021.adoc
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2022 M. Shulhan <ms@kilabit.info>
+
= Changelog 2021
Shulhan <ms@kilabit.info>
3 July 2022
diff --git a/_doc/CHANGELOG_2022.adoc b/_doc/CHANGELOG_2022.adoc
index 7609f7c2..110f8ae7 100644
--- a/_doc/CHANGELOG_2022.adoc
+++ b/_doc/CHANGELOG_2022.adoc
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 M. Shulhan <ms@kilabit.info>
+
= Changelog 2022
Shulhan <ms@kilabit.info>
:toc:
diff --git a/_doc/CHANGELOG_2023.adoc b/_doc/CHANGELOG_2023.adoc
index dd4e74f2..439d3fc6 100644
--- a/_doc/CHANGELOG_2023.adoc
+++ b/_doc/CHANGELOG_2023.adoc
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 M. Shulhan <ms@kilabit.info>
+
= CHANGELOG
Shulhan <ms@kilabit.info>
:toc:
diff --git a/_doc/CHANGELOG_2024.adoc b/_doc/CHANGELOG_2024.adoc
index 78b93791..563b62b0 100644
--- a/_doc/CHANGELOG_2024.adoc
+++ b/_doc/CHANGELOG_2024.adoc
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 M. Shulhan <ms@kilabit.info>
+
= pakakeh.go CHANGELOG
:toc:
:sectanchors:
diff --git a/_doc/RFC_2045__MIME_I_FORMAT.adoc b/_doc/RFC_2045__MIME_I_FORMAT.adoc
index 225c4d9a..0f036fe4 100644
--- a/_doc/RFC_2045__MIME_I_FORMAT.adoc
+++ b/_doc/RFC_2045__MIME_I_FORMAT.adoc
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 M. Shulhan <ms@kilabit.info>
+
= MIME Part One: Format of Internet Message Bodies
:toc:
:sectlinks:
diff --git a/_doc/RFC_2046__MIME_II_MEDIA_TYPES.adoc b/_doc/RFC_2046__MIME_II_MEDIA_TYPES.adoc
index 9e9caa13..731863d5 100644
--- a/_doc/RFC_2046__MIME_II_MEDIA_TYPES.adoc
+++ b/_doc/RFC_2046__MIME_II_MEDIA_TYPES.adoc
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 M. Shulhan <ms@kilabit.info>
+
= MIME Part Two: Media Types
:toc:
:sectlinks:
diff --git a/_doc/RFC_2049__MIME_V_CONFORMANCE.adoc b/_doc/RFC_2049__MIME_V_CONFORMANCE.adoc
index 52b93ed6..62f3fe78 100644
--- a/_doc/RFC_2049__MIME_V_CONFORMANCE.adoc
+++ b/_doc/RFC_2049__MIME_V_CONFORMANCE.adoc
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 M. Shulhan <ms@kilabit.info>
+
= MIME Part Five: Conformance Criteria and Examples
:toc:
:sectlinks:
diff --git a/_doc/RFC_2183__CONTENT-DISPOSITION.adoc b/_doc/RFC_2183__CONTENT-DISPOSITION.adoc
index 8c6c13d1..8d858e78 100644
--- a/_doc/RFC_2183__CONTENT-DISPOSITION.adoc
+++ b/_doc/RFC_2183__CONTENT-DISPOSITION.adoc
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2023 M. Shulhan <ms@kilabit.info>
+
= The Content-Disposition Header Field
:toc:
:sectlinks:
diff --git a/_doc/RFC_3207__ESMTP_TLS.adoc b/_doc/RFC_3207__ESMTP_TLS.adoc
index ace9f719..56ee10bf 100644
--- a/_doc/RFC_3207__ESMTP_TLS.adoc
+++ b/_doc/RFC_3207__ESMTP_TLS.adoc
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 M. Shulhan <ms@kilabit.info>
+
= SMTP Service Extension for Secure SMTP over Transport Layer Security
:toc:
:toclevels: 4
diff --git a/_doc/RFC_3461-3464__ESMTP_DSN.adoc b/_doc/RFC_3461-3464__ESMTP_DSN.adoc
index 155399a6..d59ab46b 100644
--- a/_doc/RFC_3461-3464__ESMTP_DSN.adoc
+++ b/_doc/RFC_3461-3464__ESMTP_DSN.adoc
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 M. Shulhan <ms@kilabit.info>
+
= Delivery Status Notification (DSN)
:toc:
:toclevels: 4
diff --git a/_doc/RFC_4422__SASL.adoc b/_doc/RFC_4422__SASL.adoc
index f1efb77f..16093db8 100644
--- a/_doc/RFC_4422__SASL.adoc
+++ b/_doc/RFC_4422__SASL.adoc
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 M. Shulhan <ms@kilabit.info>
+
= Simple Authentication and Security Layer (SASL)
:toc:
:sectnums:
diff --git a/_doc/RFC_4616__SASL_PLAIN.adoc b/_doc/RFC_4616__SASL_PLAIN.adoc
index 92005287..3003bbc6 100644
--- a/_doc/RFC_4616__SASL_PLAIN.adoc
+++ b/_doc/RFC_4616__SASL_PLAIN.adoc
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 M. Shulhan <ms@kilabit.info>
+
= The PLAIN Simple Authentication and Security Layer (SASL) Mechanism
:toc:
:sectnums:
diff --git a/_doc/RFC_4685__DKIM_THREATS.adoc b/_doc/RFC_4685__DKIM_THREATS.adoc
index 5d38e7b0..54bf6c08 100644
--- a/_doc/RFC_4685__DKIM_THREATS.adoc
+++ b/_doc/RFC_4685__DKIM_THREATS.adoc
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 M. Shulhan <ms@kilabit.info>
+
= Analysis of Threats Motivating DomainKeys Identified Mail (DKIM)
:toc:
:sectnums:
diff --git a/_doc/RFC_4954__ESMTP_AUTH.adoc b/_doc/RFC_4954__ESMTP_AUTH.adoc
index 22b4cffe..538dbace 100644
--- a/_doc/RFC_4954__ESMTP_AUTH.adoc
+++ b/_doc/RFC_4954__ESMTP_AUTH.adoc
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 M. Shulhan <ms@kilabit.info>
+
= SMTP Service Extension for Authentication
:toc:
:toclevels: 4
diff --git a/_doc/RFC_5321__SMTP.adoc b/_doc/RFC_5321__SMTP.adoc
index d80e9f5f..7bf5ab86 100644
--- a/_doc/RFC_5321__SMTP.adoc
+++ b/_doc/RFC_5321__SMTP.adoc
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 M. Shulhan <ms@kilabit.info>
+
= Simple Mail Transfer Protocol (SMTP)
:toc:
:toclevels: 4
@@ -668,5 +671,3 @@ UA::
User Agent
MTA::
Mail Transfer Agent
-
-
diff --git a/_doc/RFC_5322__IMF.adoc b/_doc/RFC_5322__IMF.adoc
index 0359f6d2..56aa84e1 100644
--- a/_doc/RFC_5322__IMF.adoc
+++ b/_doc/RFC_5322__IMF.adoc
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 M. Shulhan <ms@kilabit.info>
+
= Internet Message Format (IMF)
:toc:
:toclevels: 4
diff --git a/_doc/RFC_5585__DKIM_OVERVIEW.adoc b/_doc/RFC_5585__DKIM_OVERVIEW.adoc
index f0360a86..4b408956 100644
--- a/_doc/RFC_5585__DKIM_OVERVIEW.adoc
+++ b/_doc/RFC_5585__DKIM_OVERVIEW.adoc
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 M. Shulhan <ms@kilabit.info>
+
= DomainKeys Identified Mail (DKIM) Service Overview
:toc:
:sectnums:
diff --git a/_doc/RFC_5863__DKIM_DEVOPS.adoc b/_doc/RFC_5863__DKIM_DEVOPS.adoc
index 5483decc..f2ddf335 100644
--- a/_doc/RFC_5863__DKIM_DEVOPS.adoc
+++ b/_doc/RFC_5863__DKIM_DEVOPS.adoc
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 M. Shulhan <ms@kilabit.info>
+
= DomainKeys Identified Mail (DKIM) Development, Deployment, and Operations
:toc:
:sectnums:
diff --git a/_doc/RFC_6376__DKIM_SIGNATURES.adoc b/_doc/RFC_6376__DKIM_SIGNATURES.adoc
index bf2b4c0b..b961b481 100644
--- a/_doc/RFC_6376__DKIM_SIGNATURES.adoc
+++ b/_doc/RFC_6376__DKIM_SIGNATURES.adoc
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 M. Shulhan <ms@kilabit.info>
+
= DomainKeys Identified Mail (DKIM) Signatures
:toc:
:sectnums:
diff --git a/_doc/RFC_6891_EDNS0.adoc b/_doc/RFC_6891_EDNS0.adoc
index 966cbff3..b27b7d33 100644
--- a/_doc/RFC_6891_EDNS0.adoc
+++ b/_doc/RFC_6891_EDNS0.adoc
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2024 M. Shulhan <ms@kilabit.info>
+
= Extension Mechanisms for DNS - EDNS(0)
:toc:
:sectlinks:
diff --git a/_doc/RFC_7808__SPFv1.adoc b/_doc/RFC_7808__SPFv1.adoc
index 14fa52a7..0e1eff48 100644
--- a/_doc/RFC_7808__SPFv1.adoc
+++ b/_doc/RFC_7808__SPFv1.adoc
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 M. Shulhan <ms@kilabit.info>
+
= Sender Policy Framework (SPF) for Authorizing Use of Domains in Email, Version 1
:toc:
:sectnums:
diff --git a/_doc/RFC_9460__SVCB_and_HTTP_RR.adoc b/_doc/RFC_9460__SVCB_and_HTTP_RR.adoc
index 62856475..07588f2f 100644
--- a/_doc/RFC_9460__SVCB_and_HTTP_RR.adoc
+++ b/_doc/RFC_9460__SVCB_and_HTTP_RR.adoc
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2024 M. Shulhan <ms@kilabit.info>
+
= RFC 9460 - Service Binding and Parameter Specification via the DNS
:toc:
:sectlinks:
diff --git a/lib/_hunspell/affix.go b/lib/_hunspell/affix.go
index c1fac06f..b5a102f2 100644
--- a/lib/_hunspell/affix.go
+++ b/lib/_hunspell/affix.go
@@ -1,6 +1,5 @@
-// Copyright 2019, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 Shulhan <ms@kilabit.info>
package hunspell
diff --git a/lib/_hunspell/affix_rule.go b/lib/_hunspell/affix_rule.go
index f7524aec..f17e8276 100644
--- a/lib/_hunspell/affix_rule.go
+++ b/lib/_hunspell/affix_rule.go
@@ -1,6 +1,5 @@
-// Copyright 2019, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 Shulhan <ms@kilabit.info>
package hunspell
diff --git a/lib/_hunspell/affix_rule_test.go b/lib/_hunspell/affix_rule_test.go
index 2f07afa4..85fb3fc6 100644
--- a/lib/_hunspell/affix_rule_test.go
+++ b/lib/_hunspell/affix_rule_test.go
@@ -1,6 +1,5 @@
-// Copyright 2019, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 Shulhan <ms@kilabit.info>
package hunspell
diff --git a/lib/_hunspell/affix_test.go b/lib/_hunspell/affix_test.go
index a3afd18f..9ac18483 100644
--- a/lib/_hunspell/affix_test.go
+++ b/lib/_hunspell/affix_test.go
@@ -1,6 +1,5 @@
-// Copyright 2019, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 Shulhan <ms@kilabit.info>
package hunspell
diff --git a/lib/_hunspell/breakopt.go b/lib/_hunspell/breakopt.go
index be2586e7..00177bed 100644
--- a/lib/_hunspell/breakopt.go
+++ b/lib/_hunspell/breakopt.go
@@ -1,6 +1,5 @@
-// Copyright 2019, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 Shulhan <ms@kilabit.info>
package hunspell
diff --git a/lib/_hunspell/charsmap.go b/lib/_hunspell/charsmap.go
index c9e2e0eb..637e8050 100644
--- a/lib/_hunspell/charsmap.go
+++ b/lib/_hunspell/charsmap.go
@@ -1,6 +1,5 @@
-// Copyright 2019, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 Shulhan <ms@kilabit.info>
package hunspell
diff --git a/lib/_hunspell/compound_pattern.go b/lib/_hunspell/compound_pattern.go
index b439fd35..3bbd43ad 100644
--- a/lib/_hunspell/compound_pattern.go
+++ b/lib/_hunspell/compound_pattern.go
@@ -1,6 +1,5 @@
-// Copyright 2019, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 Shulhan <ms@kilabit.info>
package hunspell
diff --git a/lib/_hunspell/compound_rule.go b/lib/_hunspell/compound_rule.go
index 36f68d6f..09988ade 100644
--- a/lib/_hunspell/compound_rule.go
+++ b/lib/_hunspell/compound_rule.go
@@ -1,6 +1,5 @@
-// Copyright 2019, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 Shulhan <ms@kilabit.info>
package hunspell
diff --git a/lib/_hunspell/compound_syllable.go b/lib/_hunspell/compound_syllable.go
index 997ff050..a7198945 100644
--- a/lib/_hunspell/compound_syllable.go
+++ b/lib/_hunspell/compound_syllable.go
@@ -1,6 +1,5 @@
-// Copyright 2019, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 Shulhan <ms@kilabit.info>
package hunspell
diff --git a/lib/_hunspell/conversion.go b/lib/_hunspell/conversion.go
index 2e9d2ec9..b58e7763 100644
--- a/lib/_hunspell/conversion.go
+++ b/lib/_hunspell/conversion.go
@@ -1,6 +1,5 @@
-// Copyright 2019, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 Shulhan <ms@kilabit.info>
package hunspell
diff --git a/lib/_hunspell/dictionary.go b/lib/_hunspell/dictionary.go
index b8a531e2..bf4adaec 100644
--- a/lib/_hunspell/dictionary.go
+++ b/lib/_hunspell/dictionary.go
@@ -1,6 +1,5 @@
-// Copyright 2020, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2020 Shulhan <ms@kilabit.info>
package hunspell
diff --git a/lib/_hunspell/hunspell_test.go b/lib/_hunspell/hunspell_test.go
index 9aa9cd37..57efb32f 100644
--- a/lib/_hunspell/hunspell_test.go
+++ b/lib/_hunspell/hunspell_test.go
@@ -1,6 +1,5 @@
-// Copyright 2020, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2020 Shulhan <ms@kilabit.info>
package hunspell
diff --git a/lib/_hunspell/morphemes.go b/lib/_hunspell/morphemes.go
index a54281c1..51ca03f6 100644
--- a/lib/_hunspell/morphemes.go
+++ b/lib/_hunspell/morphemes.go
@@ -1,6 +1,5 @@
-// Copyright 2020, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2020 Shulhan <ms@kilabit.info>
package hunspell
diff --git a/lib/_hunspell/replacement.go b/lib/_hunspell/replacement.go
index a08d480b..8c6b23fd 100644
--- a/lib/_hunspell/replacement.go
+++ b/lib/_hunspell/replacement.go
@@ -1,6 +1,5 @@
-// Copyright 2019, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 Shulhan <ms@kilabit.info>
package hunspell
diff --git a/lib/_hunspell/spell.go b/lib/_hunspell/spell.go
index 5c77c08b..b1bdc911 100644
--- a/lib/_hunspell/spell.go
+++ b/lib/_hunspell/spell.go
@@ -1,6 +1,5 @@
-// Copyright 2019, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 Shulhan <ms@kilabit.info>
package hunspell
diff --git a/lib/_hunspell/spell_test.go b/lib/_hunspell/spell_test.go
index 3935275e..c0fa1705 100644
--- a/lib/_hunspell/spell_test.go
+++ b/lib/_hunspell/spell_test.go
@@ -1,6 +1,5 @@
-// Copyright 2019, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 Shulhan <ms@kilabit.info>
package hunspell
diff --git a/lib/_hunspell/stem.go b/lib/_hunspell/stem.go
index 0590c4a3..6ab2d2a8 100644
--- a/lib/_hunspell/stem.go
+++ b/lib/_hunspell/stem.go
@@ -1,6 +1,5 @@
-// Copyright 2019, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 Shulhan <ms@kilabit.info>
package hunspell
diff --git a/lib/_hunspell/stem_test.go b/lib/_hunspell/stem_test.go
index 733643bd..cf73c33b 100644
--- a/lib/_hunspell/stem_test.go
+++ b/lib/_hunspell/stem_test.go
@@ -1,6 +1,5 @@
-// Copyright 2020, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2020 Shulhan <ms@kilabit.info>
package hunspell
diff --git a/lib/_hunspell/tests/affixes.aff b/lib/_hunspell/tests/affixes.aff
index cf3c5002..1d621d28 100644
--- a/lib/_hunspell/tests/affixes.aff
+++ b/lib/_hunspell/tests/affixes.aff
@@ -1,3 +1,5 @@
+# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-FileCopyrightText: 2019 M. Shulhan <ms@kilabit.info>
# simple example for affix compression (see Hunspell(4))
PFX A Y 1
PFX A 0 re .
diff --git a/lib/_hunspell/tests/alias.aff b/lib/_hunspell/tests/alias.aff
index 3fbce0ac..17689545 100644
--- a/lib/_hunspell/tests/alias.aff
+++ b/lib/_hunspell/tests/alias.aff
@@ -1,3 +1,5 @@
+# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-FileCopyrightText: 2019 M. Shulhan <ms@kilabit.info>
# aliases for flag vectors (AF)
# AB -> 1
# A -> 2
diff --git a/lib/_hunspell/tests/alias2.aff b/lib/_hunspell/tests/alias2.aff
index 66a18383..876af027 100644
--- a/lib/_hunspell/tests/alias2.aff
+++ b/lib/_hunspell/tests/alias2.aff
@@ -1,3 +1,5 @@
+# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-FileCopyrightText: 2020 M. Shulhan <ms@kilabit.info>
# aliases for flag vectors (AF) and morphological descriptions (AM)
# AB -> 1
# A -> 2
diff --git a/lib/_hunspell/tests/alias3.aff b/lib/_hunspell/tests/alias3.aff
index a3281850..105a725c 100644
--- a/lib/_hunspell/tests/alias3.aff
+++ b/lib/_hunspell/tests/alias3.aff
@@ -1,3 +1,5 @@
+# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-FileCopyrightText: 2020 M. Shulhan <ms@kilabit.info>
# morph. aliases with complex prefixes
COMPLEXPREFIXES
WORDCHARS _
diff --git a/lib/_hunspell/tests/all_test.go b/lib/_hunspell/tests/all_test.go
index 43d21b28..f1b09d17 100644
--- a/lib/_hunspell/tests/all_test.go
+++ b/lib/_hunspell/tests/all_test.go
@@ -1,6 +1,5 @@
-// Copyright 2019, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 Shulhan <ms@kilabit.info>
// Packages tests contains test for hunspell package.
package tests
diff --git a/lib/_hunspell/tests/allcaps.aff b/lib/_hunspell/tests/allcaps.aff
index 57e916bf..29a3e5ca 100644
--- a/lib/_hunspell/tests/allcaps.aff
+++ b/lib/_hunspell/tests/allcaps.aff
@@ -1,3 +1,5 @@
+# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-FileCopyrightText: 2020 M. Shulhan <ms@kilabit.info>
# check uppercase forms of allcaps word + affix and words with mixed casing
WORDCHARS '.
diff --git a/lib/_hunspell/tests/morphology_test.go b/lib/_hunspell/tests/morphology_test.go
index f237b9be..1050a08b 100644
--- a/lib/_hunspell/tests/morphology_test.go
+++ b/lib/_hunspell/tests/morphology_test.go
@@ -1,6 +1,5 @@
-// Copyright 2020, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2020 Shulhan <ms@kilabit.info>
package tests
diff --git a/lib/ascii/ascii_example_test.go b/lib/ascii/ascii_example_test.go
index 32a5d4b3..8f3afff8 100644
--- a/lib/ascii/ascii_example_test.go
+++ b/lib/ascii/ascii_example_test.go
@@ -1,6 +1,5 @@
-// Copyright 2019, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 Shulhan <ms@kilabit.info>
package ascii_test
diff --git a/lib/ascii/ascii_test.go b/lib/ascii/ascii_test.go
index 0e40bcbe..f44633d9 100644
--- a/lib/ascii/ascii_test.go
+++ b/lib/ascii/ascii_test.go
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2023 M. Shulhan <ms@kilabit.info>
+
package ascii
import (
diff --git a/lib/ascii/benchmark_test.go b/lib/ascii/benchmark_test.go
index bd7578d4..729be055 100644
--- a/lib/ascii/benchmark_test.go
+++ b/lib/ascii/benchmark_test.go
@@ -1,6 +1,5 @@
-// Copyright 2019, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 Shulhan <ms@kilabit.info>
package ascii
diff --git a/lib/ascii/set.go b/lib/ascii/set.go
index ff648810..6e867287 100644
--- a/lib/ascii/set.go
+++ b/lib/ascii/set.go
@@ -1,6 +1,5 @@
-// Copyright (c) 2022, Wu Tingfeng <wutingfeng@outlook.com>
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2022 Wu Tingfeng <wutingfeng@outlook.com>
package ascii
diff --git a/lib/ascii/set_benchmark_test.go b/lib/ascii/set_benchmark_test.go
index 104dcb2a..53194daa 100644
--- a/lib/ascii/set_benchmark_test.go
+++ b/lib/ascii/set_benchmark_test.go
@@ -1,6 +1,5 @@
-// Copyright (c) 2022, Wu Tingfeng <wutingfeng@outlook.com>
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2022 Wu Tingfeng <wutingfeng@outlook.com>
package ascii
diff --git a/lib/ascii/set_test.go b/lib/ascii/set_test.go
index 68b136e7..07561be2 100644
--- a/lib/ascii/set_test.go
+++ b/lib/ascii/set_test.go
@@ -1,6 +1,5 @@
-// Copyright (c) 2022, Wu Tingfeng <wutingfeng@outlook.com>
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2022 Wu Tingfeng <wutingfeng@outlook.com>
package ascii
diff --git a/lib/bytes/bytes_benchmark_test.go b/lib/bytes/bytes_benchmark_test.go
index 19cf5260..4630d9b0 100644
--- a/lib/bytes/bytes_benchmark_test.go
+++ b/lib/bytes/bytes_benchmark_test.go
@@ -1,6 +1,5 @@
-// Copyright 2019, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 Shulhan <ms@kilabit.info>
package bytes
diff --git a/lib/bytes/parser_test.go b/lib/bytes/parser_test.go
index e931497c..453371ae 100644
--- a/lib/bytes/parser_test.go
+++ b/lib/bytes/parser_test.go
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2023 M. Shulhan <ms@kilabit.info>
+
package bytes
import (
diff --git a/lib/bytes/testdata/Parser_ReadNoSpace_test.txt b/lib/bytes/testdata/Parser_ReadNoSpace_test.txt
index e18fd125..068a7e24 100644
--- a/lib/bytes/testdata/Parser_ReadNoSpace_test.txt
+++ b/lib/bytes/testdata/Parser_ReadNoSpace_test.txt
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2024 M. Shulhan <ms@kilabit.info>
+
The test initialize Parser with seven delimiters.
>>> multiline:delims
diff --git a/lib/bytes/testdata/Parser_Read_test.txt b/lib/bytes/testdata/Parser_Read_test.txt
index 235c9730..823f7cf7 100644
--- a/lib/bytes/testdata/Parser_Read_test.txt
+++ b/lib/bytes/testdata/Parser_Read_test.txt
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2024 M. Shulhan <ms@kilabit.info>
+
The test initialize Parser with seven delimiters.
>>> multiline:delims
diff --git a/lib/clise/example_test.go b/lib/clise/example_test.go
index 9fb7d36c..6f2666ac 100644
--- a/lib/clise/example_test.go
+++ b/lib/clise/example_test.go
@@ -1,6 +1,5 @@
-// Copyright 2022, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2022 Shulhan <ms@kilabit.info>
package clise
diff --git a/lib/contact/README.html b/lib/contact/README.html
deleted file mode 100644
index 458931a0..00000000
--- a/lib/contact/README.html
+++ /dev/null
@@ -1,55 +0,0 @@
-<!DOCTYPE html>
-<html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1" />
- <meta name="theme-color" content="#375EAB" />
-
- <title></title>
- </head>
- <body>
- <div class="topbar">
- <div class="container">
- <div class="top-heading">
- <a href="/">github.com/shuLhan/share</a>
- </div>
- <div class="menu">
- <a href="https://godoc.org/github.com/shuLhan/share">GoDoc</a>
- </div>
- <div class="menu">
- <a href="/CHANGELOG.html">Changelog</a>
- </div>
- </div>
- </div>
-
- <div class="page">
- <div class="container">
- <h1></h1>
- <p><a href="https://godoc.org/github.com/shuLhan/share/lib/contact"><img src="https://godoc.org/github.com/shuLhan/share/lib/contact?status.svg" alt="GoDoc"></a>
-<a href="https://goreportcard.com/report/github.com/shuLhan/share/lib/contact"><img src="https://goreportcard.com/badge/github.com/shuLhan/share/lib/contact" alt="Go Report Card"></a></p>
-<h1>contact</h1>
-<p>The Go library to manage contacts.</p>
-<h2>Features</h2>
-<ul>
-<li>Import Google's contacts v3 with OAuth2</li>
-<li>Import Yahoo's contacts with OAuth2</li>
-<li>Import Microsoft's Live/Outlook contacts with OAuth2</li>
-</ul>
-<h2>TODO</h2>
-<ul>
-<li>VCard 4.0 Encode and Decode</li>
-</ul>
-
- </div>
-
- </div>
-
-
- <div class="footer">
- Copyright 2019, Shulhan &lt;ms@kilabit.info&gt;. All rights reserved.
- <br />
- Use of this source code is governed by a BSD-style license that can be
- found in the <a href="/LICENSE">LICENSE</a> file.
- </div>
- </body>
-</html>
diff --git a/lib/contact/README.md b/lib/contact/README.md
index 2c300c01..8a924b1b 100644
--- a/lib/contact/README.md
+++ b/lib/contact/README.md
@@ -1,3 +1,6 @@
+<!-- SPDX-License-Identifier: BSD-3-Clause -->
+<!-- SPDX-FileCopyrightText: 2018 M. Shulhan <ms@kilabit.info> -->
+
[![GoDoc](https://godoc.org/git.sr.ht/~shulhan/pakakeh.go/lib/contact?status.svg)](https://godoc.org/git.sr.ht/~shulhan/pakakeh.go/lib/contact)
[![Go Report Card](https://goreportcard.com/badge/git.sr.ht/~shulhan/pakakeh.go/lib/contact)](https://goreportcard.com/report/git.sr.ht/~shulhan/pakakeh.go/lib/contact)
diff --git a/lib/contact/address.go b/lib/contact/address.go
index 569de372..2f7f886e 100644
--- a/lib/contact/address.go
+++ b/lib/contact/address.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package contact
diff --git a/lib/contact/const.go b/lib/contact/const.go
index ed430c1a..d146c27f 100644
--- a/lib/contact/const.go
+++ b/lib/contact/const.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package contact
diff --git a/lib/contact/contact.go b/lib/contact/contact.go
index 07d20a05..4b72af3a 100644
--- a/lib/contact/contact.go
+++ b/lib/contact/contact.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
// Package contact provide a library to import contact from Google, Microsoft,
// and Yahoo.
diff --git a/lib/contact/date.go b/lib/contact/date.go
index 0a2d0146..3f5b01d5 100644
--- a/lib/contact/date.go
+++ b/lib/contact/date.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package contact
diff --git a/lib/contact/email.go b/lib/contact/email.go
index 7b73291a..70b0cfe4 100644
--- a/lib/contact/email.go
+++ b/lib/contact/email.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package contact
diff --git a/lib/contact/google/address.go b/lib/contact/google/address.go
index dfc2f4f8..563ae101 100644
--- a/lib/contact/google/address.go
+++ b/lib/contact/google/address.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package google
diff --git a/lib/contact/google/author.go b/lib/contact/google/author.go
index fc6c8642..65ae94a6 100644
--- a/lib/contact/google/author.go
+++ b/lib/contact/google/author.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package google
diff --git a/lib/contact/google/birthday.go b/lib/contact/google/birthday.go
index 46eb6be7..6de51093 100644
--- a/lib/contact/google/birthday.go
+++ b/lib/contact/google/birthday.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package google
diff --git a/lib/contact/google/category.go b/lib/contact/google/category.go
index eea1f7e3..2ae44978 100644
--- a/lib/contact/google/category.go
+++ b/lib/contact/google/category.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package google
diff --git a/lib/contact/google/contact.go b/lib/contact/google/contact.go
index bdd6afed..111643c9 100644
--- a/lib/contact/google/contact.go
+++ b/lib/contact/google/contact.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package google
diff --git a/lib/contact/google/contact_test.go b/lib/contact/google/contact_test.go
index d85d9416..278e6bf3 100644
--- a/lib/contact/google/contact_test.go
+++ b/lib/contact/google/contact_test.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package google
diff --git a/lib/contact/google/email.go b/lib/contact/google/email.go
index e38466c3..05bff0eb 100644
--- a/lib/contact/google/email.go
+++ b/lib/contact/google/email.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package google
diff --git a/lib/contact/google/event.go b/lib/contact/google/event.go
index de9723db..a84cedc3 100644
--- a/lib/contact/google/event.go
+++ b/lib/contact/google/event.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package google
diff --git a/lib/contact/google/eventtime.go b/lib/contact/google/eventtime.go
index 3f7803af..66fe11d5 100644
--- a/lib/contact/google/eventtime.go
+++ b/lib/contact/google/eventtime.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package google
diff --git a/lib/contact/google/feed.go b/lib/contact/google/feed.go
index f547a12c..fbbc3584 100644
--- a/lib/contact/google/feed.go
+++ b/lib/contact/google/feed.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package google
diff --git a/lib/contact/google/gd.go b/lib/contact/google/gd.go
index 31ee38ff..4b1ec1fa 100644
--- a/lib/contact/google/gd.go
+++ b/lib/contact/google/gd.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package google
diff --git a/lib/contact/google/generator.go b/lib/contact/google/generator.go
index 2d23290a..4b384fbd 100644
--- a/lib/contact/google/generator.go
+++ b/lib/contact/google/generator.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package google
diff --git a/lib/contact/google/google.go b/lib/contact/google/google.go
index 36030274..9b5b913f 100644
--- a/lib/contact/google/google.go
+++ b/lib/contact/google/google.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
// Package google implement Google's contact API v3.
package google
diff --git a/lib/contact/google/google_test.go b/lib/contact/google/google_test.go
index c148c7a2..2a9b0eb8 100644
--- a/lib/contact/google/google_test.go
+++ b/lib/contact/google/google_test.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package google
diff --git a/lib/contact/google/link.go b/lib/contact/google/link.go
index 1fd231bd..8d9b435d 100644
--- a/lib/contact/google/link.go
+++ b/lib/contact/google/link.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package google
diff --git a/lib/contact/google/name.go b/lib/contact/google/name.go
index 32dc339f..cf78025b 100644
--- a/lib/contact/google/name.go
+++ b/lib/contact/google/name.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package google
diff --git a/lib/contact/google/org.go b/lib/contact/google/org.go
index 14a324f2..c2cb8b1f 100644
--- a/lib/contact/google/org.go
+++ b/lib/contact/google/org.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package google
diff --git a/lib/contact/google/phone.go b/lib/contact/google/phone.go
index 226a5929..22831fa7 100644
--- a/lib/contact/google/phone.go
+++ b/lib/contact/google/phone.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package google
diff --git a/lib/contact/google/root.go b/lib/contact/google/root.go
index 74e7def7..e5cbff53 100644
--- a/lib/contact/google/root.go
+++ b/lib/contact/google/root.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package google
diff --git a/lib/contact/google/testdata/contact.json.license b/lib/contact/google/testdata/contact.json.license
new file mode 100644
index 00000000..71611e87
--- /dev/null
+++ b/lib/contact/google/testdata/contact.json.license
@@ -0,0 +1,2 @@
+SPDX-License-Identifier: BSD-3-Clause
+SPDX-FileCopyrightText: M. Shulhan <ms@kilabit.info>
diff --git a/lib/contact/google/testdata/contacts.json.license b/lib/contact/google/testdata/contacts.json.license
new file mode 100644
index 00000000..71611e87
--- /dev/null
+++ b/lib/contact/google/testdata/contacts.json.license
@@ -0,0 +1,2 @@
+SPDX-License-Identifier: BSD-3-Clause
+SPDX-FileCopyrightText: M. Shulhan <ms@kilabit.info>
diff --git a/lib/contact/google/util.go b/lib/contact/google/util.go
index 7c5e8a4d..1c512f51 100644
--- a/lib/contact/google/util.go
+++ b/lib/contact/google/util.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package google
diff --git a/lib/contact/microsoft/address.go b/lib/contact/microsoft/address.go
index 63ed9662..156c271d 100644
--- a/lib/contact/microsoft/address.go
+++ b/lib/contact/microsoft/address.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package microsoft
diff --git a/lib/contact/microsoft/contact.go b/lib/contact/microsoft/contact.go
index 302eafb8..cb36594b 100644
--- a/lib/contact/microsoft/contact.go
+++ b/lib/contact/microsoft/contact.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package microsoft
diff --git a/lib/contact/microsoft/email.go b/lib/contact/microsoft/email.go
index 78edb9da..9f3eee3f 100644
--- a/lib/contact/microsoft/email.go
+++ b/lib/contact/microsoft/email.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package microsoft
diff --git a/lib/contact/microsoft/microsoft.go b/lib/contact/microsoft/microsoft.go
index b0a70065..402ed190 100644
--- a/lib/contact/microsoft/microsoft.go
+++ b/lib/contact/microsoft/microsoft.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
// Package microsoft implement Microsoft's Live contact API v1.0.
//
diff --git a/lib/contact/microsoft/microsoft_test.go b/lib/contact/microsoft/microsoft_test.go
index 57ce484c..ae9669da 100644
--- a/lib/contact/microsoft/microsoft_test.go
+++ b/lib/contact/microsoft/microsoft_test.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package microsoft
diff --git a/lib/contact/microsoft/root.go b/lib/contact/microsoft/root.go
index 0ce16759..c20baf34 100644
--- a/lib/contact/microsoft/root.go
+++ b/lib/contact/microsoft/root.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package microsoft
diff --git a/lib/contact/microsoft/testdata/contacts.json.license b/lib/contact/microsoft/testdata/contacts.json.license
new file mode 100644
index 00000000..71611e87
--- /dev/null
+++ b/lib/contact/microsoft/testdata/contacts.json.license
@@ -0,0 +1,2 @@
+SPDX-License-Identifier: BSD-3-Clause
+SPDX-FileCopyrightText: M. Shulhan <ms@kilabit.info>
diff --git a/lib/contact/name.go b/lib/contact/name.go
index fda5b20c..610fdb08 100644
--- a/lib/contact/name.go
+++ b/lib/contact/name.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package contact
diff --git a/lib/contact/phone.go b/lib/contact/phone.go
index fb3cf44d..4cbf0cd0 100644
--- a/lib/contact/phone.go
+++ b/lib/contact/phone.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package contact
diff --git a/lib/contact/vcard/gender.go b/lib/contact/vcard/gender.go
index 8db58fc6..8615a659 100644
--- a/lib/contact/vcard/gender.go
+++ b/lib/contact/vcard/gender.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package vcard
diff --git a/lib/contact/vcard/geolocation.go b/lib/contact/vcard/geolocation.go
index 5f6cb2fe..c119bdf8 100644
--- a/lib/contact/vcard/geolocation.go
+++ b/lib/contact/vcard/geolocation.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package vcard
diff --git a/lib/contact/vcard/messaging.go b/lib/contact/vcard/messaging.go
index 6bdf6c96..989b7673 100644
--- a/lib/contact/vcard/messaging.go
+++ b/lib/contact/vcard/messaging.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package vcard
diff --git a/lib/contact/vcard/relation.go b/lib/contact/vcard/relation.go
index cb5a6331..18c7066c 100644
--- a/lib/contact/vcard/relation.go
+++ b/lib/contact/vcard/relation.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package vcard
diff --git a/lib/contact/vcard/resource.go b/lib/contact/vcard/resource.go
index 1bc3cd36..383bbf4e 100644
--- a/lib/contact/vcard/resource.go
+++ b/lib/contact/vcard/resource.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package vcard
diff --git a/lib/contact/vcard/vcard.go b/lib/contact/vcard/vcard.go
index 5178dee8..da426fcb 100644
--- a/lib/contact/vcard/vcard.go
+++ b/lib/contact/vcard/vcard.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
// Package vcard implement RFC6350 for encoding and decoding VCard formatted
// data.
diff --git a/lib/contact/yahoo/category.go b/lib/contact/yahoo/category.go
index c7354345..236226a1 100644
--- a/lib/contact/yahoo/category.go
+++ b/lib/contact/yahoo/category.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package yahoo
diff --git a/lib/contact/yahoo/contact.go b/lib/contact/yahoo/contact.go
index 735cd4af..06eeeeb7 100644
--- a/lib/contact/yahoo/contact.go
+++ b/lib/contact/yahoo/contact.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package yahoo
diff --git a/lib/contact/yahoo/contact_test.go b/lib/contact/yahoo/contact_test.go
index 7e653efb..2681d94a 100644
--- a/lib/contact/yahoo/contact_test.go
+++ b/lib/contact/yahoo/contact_test.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package yahoo
diff --git a/lib/contact/yahoo/contacts.go b/lib/contact/yahoo/contacts.go
index fa5d7ffa..376a99f0 100644
--- a/lib/contact/yahoo/contacts.go
+++ b/lib/contact/yahoo/contacts.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package yahoo
diff --git a/lib/contact/yahoo/contacts_test.go b/lib/contact/yahoo/contacts_test.go
index 012aced4..e2fd581b 100644
--- a/lib/contact/yahoo/contacts_test.go
+++ b/lib/contact/yahoo/contacts_test.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package yahoo
diff --git a/lib/contact/yahoo/meta.go b/lib/contact/yahoo/meta.go
index 29d12f17..e4736a06 100644
--- a/lib/contact/yahoo/meta.go
+++ b/lib/contact/yahoo/meta.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package yahoo
diff --git a/lib/contact/yahoo/meta2.go b/lib/contact/yahoo/meta2.go
index 8d8eb214..5c25564a 100644
--- a/lib/contact/yahoo/meta2.go
+++ b/lib/contact/yahoo/meta2.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package yahoo
diff --git a/lib/contact/yahoo/root.go b/lib/contact/yahoo/root.go
index 0c6c0935..bcd02b35 100644
--- a/lib/contact/yahoo/root.go
+++ b/lib/contact/yahoo/root.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package yahoo
diff --git a/lib/contact/yahoo/testdata/contact.json.license b/lib/contact/yahoo/testdata/contact.json.license
new file mode 100644
index 00000000..71611e87
--- /dev/null
+++ b/lib/contact/yahoo/testdata/contact.json.license
@@ -0,0 +1,2 @@
+SPDX-License-Identifier: BSD-3-Clause
+SPDX-FileCopyrightText: M. Shulhan <ms@kilabit.info>
diff --git a/lib/contact/yahoo/testdata/contacts.json.license b/lib/contact/yahoo/testdata/contacts.json.license
new file mode 100644
index 00000000..71611e87
--- /dev/null
+++ b/lib/contact/yahoo/testdata/contacts.json.license
@@ -0,0 +1,2 @@
+SPDX-License-Identifier: BSD-3-Clause
+SPDX-FileCopyrightText: M. Shulhan <ms@kilabit.info>
diff --git a/lib/contact/yahoo/yahoo.go b/lib/contact/yahoo/yahoo.go
index d3cee4a6..64b1a932 100644
--- a/lib/contact/yahoo/yahoo.go
+++ b/lib/contact/yahoo/yahoo.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
// Package yahoo implement user's contacts import using Yahoo API.
//
diff --git a/lib/crypto/crypto_example_test.go b/lib/crypto/crypto_example_test.go
index 1d0fb866..723c8678 100644
--- a/lib/crypto/crypto_example_test.go
+++ b/lib/crypto/crypto_example_test.go
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2023 M. Shulhan <ms@kilabit.info>
+
package crypto
import (
diff --git a/lib/crypto/crypto_test.go b/lib/crypto/crypto_test.go
index a90f42ca..b2d2fd8f 100644
--- a/lib/crypto/crypto_test.go
+++ b/lib/crypto/crypto_test.go
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2023 M. Shulhan <ms@kilabit.info>
+
package crypto
import (
diff --git a/lib/crypto/testdata/askpass.sh b/lib/crypto/testdata/askpass.sh
index 13ded5d5..d63c25be 100755
--- a/lib/crypto/testdata/askpass.sh
+++ b/lib/crypto/testdata/askpass.sh
@@ -1,3 +1,5 @@
#!/bin/sh
+# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-FileCopyrightText: 2023 M. Shulhan <ms@kilabit.info>
echo s3cret
diff --git a/lib/crypto/testdata/encrypt_oaep_test.txt b/lib/crypto/testdata/encrypt_oaep_test.txt
index e536a572..9fd613a3 100644
--- a/lib/crypto/testdata/encrypt_oaep_test.txt
+++ b/lib/crypto/testdata/encrypt_oaep_test.txt
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 M. Shulhan <ms@kilabit.info>
+
Test encrypt and decrypt large message.
>>> private_key.pem
diff --git a/lib/debug/cpu_profile.go b/lib/debug/cpu_profile.go
index 42a9dd0b..7bceed5b 100644
--- a/lib/debug/cpu_profile.go
+++ b/lib/debug/cpu_profile.go
@@ -1,6 +1,5 @@
-// Copyright 2020, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2020 Shulhan <ms@kilabit.info>
package debug
diff --git a/lib/debug/debug.go b/lib/debug/debug.go
index 790db417..65e4d470 100644
--- a/lib/debug/debug.go
+++ b/lib/debug/debug.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
// Package debug provide library for profiling Go program.
// Its a wrapper for standard [runtime] and [runtime/pprof] packages.
diff --git a/lib/debug/memheap.go b/lib/debug/memheap.go
index 91758e69..de0d130d 100644
--- a/lib/debug/memheap.go
+++ b/lib/debug/memheap.go
@@ -1,6 +1,5 @@
-// Copyright 2019, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 Shulhan <ms@kilabit.info>
package debug
diff --git a/lib/debug/pprof.go b/lib/debug/pprof.go
index 28b93c1b..3201d9e3 100644
--- a/lib/debug/pprof.go
+++ b/lib/debug/pprof.go
@@ -1,6 +1,5 @@
-// Copyright 2019, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 Shulhan <ms@kilabit.info>
package debug
diff --git a/lib/dns/answer.go b/lib/dns/answer.go
index 3cd2f9b1..dc81e359 100644
--- a/lib/dns/answer.go
+++ b/lib/dns/answer.go
@@ -1,6 +1,5 @@
-// Copyright 2019, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 Shulhan <ms@kilabit.info>
package dns
diff --git a/lib/dns/answer_test.go b/lib/dns/answer_test.go
index d12baeaa..f21c14c5 100644
--- a/lib/dns/answer_test.go
+++ b/lib/dns/answer_test.go
@@ -1,6 +1,5 @@
-// Copyright 2019, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 Shulhan <ms@kilabit.info>
package dns
diff --git a/lib/dns/answers_test.go b/lib/dns/answers_test.go
index 66377b64..77912fa7 100644
--- a/lib/dns/answers_test.go
+++ b/lib/dns/answers_test.go
@@ -1,6 +1,5 @@
-// Copyright 2019, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 Shulhan <ms@kilabit.info>
package dns
diff --git a/lib/dns/client.go b/lib/dns/client.go
index 972fdd60..33c137c4 100644
--- a/lib/dns/client.go
+++ b/lib/dns/client.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package dns
diff --git a/lib/dns/dns.go b/lib/dns/dns.go
index 0fa8417a..7a19a724 100644
--- a/lib/dns/dns.go
+++ b/lib/dns/dns.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
// Package dns implement DNS client and server.
//
diff --git a/lib/dns/dns_test.go b/lib/dns/dns_test.go
index ce94c9f8..48212766 100644
--- a/lib/dns/dns_test.go
+++ b/lib/dns/dns_test.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package dns
diff --git a/lib/dns/doh_client_test.go b/lib/dns/doh_client_test.go
index 05daa9e3..3867c818 100644
--- a/lib/dns/doh_client_test.go
+++ b/lib/dns/doh_client_test.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package dns
diff --git a/lib/dns/dot_client_test.go b/lib/dns/dot_client_test.go
index b02c4a3d..1f8679e2 100644
--- a/lib/dns/dot_client_test.go
+++ b/lib/dns/dot_client_test.go
@@ -1,6 +1,5 @@
-// Copyright 2019, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 Shulhan <ms@kilabit.info>
package dns
diff --git a/lib/dns/error.go b/lib/dns/error.go
index 4f70f4a7..113b7efb 100644
--- a/lib/dns/error.go
+++ b/lib/dns/error.go
@@ -1,6 +1,5 @@
-// Copyright 2024, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2024 Shulhan <ms@kilabit.info>
package dns
diff --git a/lib/dns/funcs.go b/lib/dns/funcs.go
index 9da1469e..d766146d 100644
--- a/lib/dns/funcs.go
+++ b/lib/dns/funcs.go
@@ -1,6 +1,5 @@
-// Copyright 2019, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 Shulhan <ms@kilabit.info>
package dns
diff --git a/lib/dns/funcs_test.go b/lib/dns/funcs_test.go
index 03470ce4..01f0567e 100644
--- a/lib/dns/funcs_test.go
+++ b/lib/dns/funcs_test.go
@@ -1,6 +1,5 @@
-// Copyright 2019, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 Shulhan <ms@kilabit.info>
package dns
diff --git a/lib/dns/hosts_file.go b/lib/dns/hosts_file.go
index 87f531bc..83ee7863 100644
--- a/lib/dns/hosts_file.go
+++ b/lib/dns/hosts_file.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package dns
diff --git a/lib/dns/hosts_file_example_test.go b/lib/dns/hosts_file_example_test.go
index 5cd784cf..4b7b9356 100644
--- a/lib/dns/hosts_file_example_test.go
+++ b/lib/dns/hosts_file_example_test.go
@@ -1,6 +1,5 @@
-// Copyright 2022, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2022 Shulhan <ms@kilabit.info>
package dns
diff --git a/lib/dns/hosts_file_test.go b/lib/dns/hosts_file_test.go
index f5a9000d..c4dd5352 100644
--- a/lib/dns/hosts_file_test.go
+++ b/lib/dns/hosts_file_test.go
@@ -1,6 +1,5 @@
-// Copyright 2020, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2020 Shulhan <ms@kilabit.info>
package dns
diff --git a/lib/dns/idpool.go b/lib/dns/idpool.go
index cd11ca35..1f6b8147 100644
--- a/lib/dns/idpool.go
+++ b/lib/dns/idpool.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package dns
diff --git a/lib/dns/idpool_test.go b/lib/dns/idpool_test.go
index e9ef3948..14a9316a 100644
--- a/lib/dns/idpool_test.go
+++ b/lib/dns/idpool_test.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package dns
diff --git a/lib/dns/message_header_bench_test.go b/lib/dns/message_header_bench_test.go
index b3167729..af7b0f7d 100644
--- a/lib/dns/message_header_bench_test.go
+++ b/lib/dns/message_header_bench_test.go
@@ -1,6 +1,5 @@
-// Copyright 2021, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2021 Shulhan <ms@kilabit.info>
package dns
diff --git a/lib/dns/message_header_test.go b/lib/dns/message_header_test.go
index 95fbe113..15a0edbf 100644
--- a/lib/dns/message_header_test.go
+++ b/lib/dns/message_header_test.go
@@ -1,6 +1,5 @@
-// Copyright 2021, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2021 Shulhan <ms@kilabit.info>
package dns
diff --git a/lib/dns/message_question_bench_test.go b/lib/dns/message_question_bench_test.go
index dd2e9f77..6392680a 100644
--- a/lib/dns/message_question_bench_test.go
+++ b/lib/dns/message_question_bench_test.go
@@ -1,6 +1,5 @@
-// Copyright 2021, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2021 Shulhan <ms@kilabit.info>
package dns
diff --git a/lib/dns/message_question_test.go b/lib/dns/message_question_test.go
index 109e4b0c..bf210561 100644
--- a/lib/dns/message_question_test.go
+++ b/lib/dns/message_question_test.go
@@ -1,6 +1,5 @@
-// Copyright 2021, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2021 Shulhan <ms@kilabit.info>
package dns
diff --git a/lib/dns/rdata_https.go b/lib/dns/rdata_https.go
index dae748e4..62d81c32 100644
--- a/lib/dns/rdata_https.go
+++ b/lib/dns/rdata_https.go
@@ -1,6 +1,5 @@
-// Copyright 2024, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2024 Shulhan <ms@kilabit.info>
package dns
diff --git a/lib/dns/rdata_minfo.go b/lib/dns/rdata_minfo.go
index 6cad19c0..69e6965a 100644
--- a/lib/dns/rdata_minfo.go
+++ b/lib/dns/rdata_minfo.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package dns
diff --git a/lib/dns/rdata_mx.go b/lib/dns/rdata_mx.go
index eb41e255..0432e683 100644
--- a/lib/dns/rdata_mx.go
+++ b/lib/dns/rdata_mx.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package dns
diff --git a/lib/dns/rdata_opt_var.go b/lib/dns/rdata_opt_var.go
index c08ef7b2..561a9465 100644
--- a/lib/dns/rdata_opt_var.go
+++ b/lib/dns/rdata_opt_var.go
@@ -1,6 +1,5 @@
-// Copyright 2024, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2024 Shulhan <ms@kilabit.info>
package dns
diff --git a/lib/dns/rdata_soa.go b/lib/dns/rdata_soa.go
index f7d97176..a76dfe7c 100644
--- a/lib/dns/rdata_soa.go
+++ b/lib/dns/rdata_soa.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package dns
diff --git a/lib/dns/rdata_srv.go b/lib/dns/rdata_srv.go
index 832c63c7..6e58d729 100644
--- a/lib/dns/rdata_srv.go
+++ b/lib/dns/rdata_srv.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package dns
diff --git a/lib/dns/rdata_wks.go b/lib/dns/rdata_wks.go
index ad7b9d2a..3eac1fe2 100644
--- a/lib/dns/rdata_wks.go
+++ b/lib/dns/rdata_wks.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package dns
diff --git a/lib/dns/record_class.go b/lib/dns/record_class.go
index 149f5965..76a42616 100644
--- a/lib/dns/record_class.go
+++ b/lib/dns/record_class.go
@@ -1,6 +1,5 @@
-// Copyright 2021, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2021 Shulhan <ms@kilabit.info>
package dns
diff --git a/lib/dns/record_type.go b/lib/dns/record_type.go
index dae8232b..2b6be9d6 100644
--- a/lib/dns/record_type.go
+++ b/lib/dns/record_type.go
@@ -1,6 +1,5 @@
-// Copyright 2021, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2021 Shulhan <ms@kilabit.info>
package dns
diff --git a/lib/dns/record_type_example_test.go b/lib/dns/record_type_example_test.go
index 8ff3e2a1..230a517d 100644
--- a/lib/dns/record_type_example_test.go
+++ b/lib/dns/record_type_example_test.go
@@ -1,6 +1,5 @@
-// Copyright 2021, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2021 Shulhan <ms@kilabit.info>
package dns
diff --git a/lib/dns/record_type_test.go b/lib/dns/record_type_test.go
index 6b491cab..9d0675cb 100644
--- a/lib/dns/record_type_test.go
+++ b/lib/dns/record_type_test.go
@@ -1,6 +1,5 @@
-// Copyright 2021, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2021 Shulhan <ms@kilabit.info>
package dns
diff --git a/lib/dns/request.go b/lib/dns/request.go
index 94cd4994..fc7355d5 100644
--- a/lib/dns/request.go
+++ b/lib/dns/request.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package dns
diff --git a/lib/dns/resource_record_test.go b/lib/dns/resource_record_test.go
index 050dce7f..08dc02e8 100644
--- a/lib/dns/resource_record_test.go
+++ b/lib/dns/resource_record_test.go
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2023 M. Shulhan <ms@kilabit.info>
+
package dns
import (
diff --git a/lib/dns/server_example_test.go b/lib/dns/server_example_test.go
index b4810364..c9222885 100644
--- a/lib/dns/server_example_test.go
+++ b/lib/dns/server_example_test.go
@@ -1,6 +1,5 @@
-// Copyright 2021, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2021 Shulhan <ms@kilabit.info>
package dns
diff --git a/lib/dns/server_options.go b/lib/dns/server_options.go
index 974f5cff..20629c2b 100644
--- a/lib/dns/server_options.go
+++ b/lib/dns/server_options.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package dns
diff --git a/lib/dns/server_options_test.go b/lib/dns/server_options_test.go
index 8fada269..2ced26f2 100644
--- a/lib/dns/server_options_test.go
+++ b/lib/dns/server_options_test.go
@@ -1,6 +1,5 @@
-// Copyright 2019, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 Shulhan <ms@kilabit.info>
package dns
diff --git a/lib/dns/tcp_client_example_test.go b/lib/dns/tcp_client_example_test.go
index 9c57ee2c..ff1b6cdc 100644
--- a/lib/dns/tcp_client_example_test.go
+++ b/lib/dns/tcp_client_example_test.go
@@ -1,6 +1,5 @@
-// Copyright 2021, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2021 Shulhan <ms@kilabit.info>
package dns
diff --git a/lib/dns/tcp_client_test.go b/lib/dns/tcp_client_test.go
index 6db64018..72f6a48d 100644
--- a/lib/dns/tcp_client_test.go
+++ b/lib/dns/tcp_client_test.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package dns
diff --git a/lib/dns/testdata/ParseZone_SVCB_test.txt b/lib/dns/testdata/ParseZone_SVCB_test.txt
index 270f58e3..8bb07842 100644
--- a/lib/dns/testdata/ParseZone_SVCB_test.txt
+++ b/lib/dns/testdata/ParseZone_SVCB_test.txt
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2024 M. Shulhan <ms@kilabit.info>
+
vi: set tw=0:
Test data for parsing SVCB and HTTPS record from zone file, based on
diff --git a/lib/dns/testdata/message/UnpackHeaderQuestion_test.txt b/lib/dns/testdata/message/UnpackHeaderQuestion_test.txt
index 01dae739..f146f212 100644
--- a/lib/dns/testdata/message/UnpackHeaderQuestion_test.txt
+++ b/lib/dns/testdata/message/UnpackHeaderQuestion_test.txt
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2025 M. Shulhan <ms@kilabit.info>
+
Various invalid messages that we receive on our server.
>>> invalidHeader001
diff --git a/lib/dns/testdata/message/UnpackMessage_HTTPS_test.txt b/lib/dns/testdata/message/UnpackMessage_HTTPS_test.txt
index 80c1f58d..e4bf0b1c 100644
--- a/lib/dns/testdata/message/UnpackMessage_HTTPS_test.txt
+++ b/lib/dns/testdata/message/UnpackMessage_HTTPS_test.txt
@@ -1,3 +1,5 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2025 M. Shulhan <ms@kilabit.info>
>>> graph.facebook.com
0000000 4a42 8180 0001 0003 0000 0000 0567 7261
diff --git a/lib/dns/testdata/message/UnpackMessage_OPT_test.txt b/lib/dns/testdata/message/UnpackMessage_OPT_test.txt
index 244df80a..a4026315 100644
--- a/lib/dns/testdata/message/UnpackMessage_OPT_test.txt
+++ b/lib/dns/testdata/message/UnpackMessage_OPT_test.txt
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2024 M. Shulhan <ms@kilabit.info>
+
>>> cgv5hi6hcnsdsf1etkyqzvuzdyus.multi.surbl.org:00
0000000 4d2d 8182 0001 0000 0000 0001 1c43 4756
0000010 3548 6936 6843 6e73 4453 6631 6574 4b59
diff --git a/lib/dns/testdata/message/UnpackMessage_SVCB_test.txt b/lib/dns/testdata/message/UnpackMessage_SVCB_test.txt
index 1162c6fb..f61c59c3 100644
--- a/lib/dns/testdata/message/UnpackMessage_SVCB_test.txt
+++ b/lib/dns/testdata/message/UnpackMessage_SVCB_test.txt
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2024 M. Shulhan <ms@kilabit.info>
+
Test data for parsing SVCB record from bytes.
The test input taken from output of parsing SVCB record from zone file.
diff --git a/lib/dns/testdata/message/add_authority_test.txt b/lib/dns/testdata/message/add_authority_test.txt
index 494b26fe..909067eb 100644
--- a/lib/dns/testdata/message/add_authority_test.txt
+++ b/lib/dns/testdata/message/add_authority_test.txt
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2023 M. Shulhan <ms@kilabit.info>
+
Test data for Message.AddAuthority method.
<<< error_with_txt
diff --git a/lib/dns/testdata/zone/kilabit_info_test.txt b/lib/dns/testdata/zone/kilabit_info_test.txt
index a1dcfdd3..6c3e8dae 100644
--- a/lib/dns/testdata/zone/kilabit_info_test.txt
+++ b/lib/dns/testdata/zone/kilabit_info_test.txt
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2023 M. Shulhan <ms@kilabit.info>
+
origin: kilabit.info.
>>> zone_in.txt
diff --git a/lib/dns/testdata/zone/pcguide_test.txt b/lib/dns/testdata/zone/pcguide_test.txt
index 3f2dbe99..aa430464 100644
--- a/lib/dns/testdata/zone/pcguide_test.txt
+++ b/lib/dns/testdata/zone/pcguide_test.txt
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2023 M. Shulhan <ms@kilabit.info>
+
origin:
ttl: 0
diff --git a/lib/dns/testdata/zone/rfc1035_test.txt b/lib/dns/testdata/zone/rfc1035_test.txt
index 4ea33cbd..e24e8257 100644
--- a/lib/dns/testdata/zone/rfc1035_test.txt
+++ b/lib/dns/testdata/zone/rfc1035_test.txt
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2023 M. Shulhan <ms@kilabit.info>
+
origin: ISI.EDU
ttl: 3600
diff --git a/lib/dns/testdata/zone/rfc2782_srv_test.txt b/lib/dns/testdata/zone/rfc2782_srv_test.txt
index b36eae0b..1a3f352e 100644
--- a/lib/dns/testdata/zone/rfc2782_srv_test.txt
+++ b/lib/dns/testdata/zone/rfc2782_srv_test.txt
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2023 M. Shulhan <ms@kilabit.info>
+
Test parsing SRV records based on example in RFC 2782.
TODO: should *._tcp record discarded or not?
diff --git a/lib/dns/testdata/zone/windows_test.txt b/lib/dns/testdata/zone/windows_test.txt
index d613cf01..f31b65b7 100644
--- a/lib/dns/testdata/zone/windows_test.txt
+++ b/lib/dns/testdata/zone/windows_test.txt
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2023 M. Shulhan <ms@kilabit.info>
+
Zone file from issue #6.
>>> zone_in.txt
diff --git a/lib/dns/testdata/zone/with_soa_test.txt b/lib/dns/testdata/zone/with_soa_test.txt
index 632d4058..a20edfdb 100644
--- a/lib/dns/testdata/zone/with_soa_test.txt
+++ b/lib/dns/testdata/zone/with_soa_test.txt
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2023 M. Shulhan <ms@kilabit.info>
+
ttl: 3600
>>> zone_in.txt
diff --git a/lib/dns/testdata/zone/without_soa_test.txt b/lib/dns/testdata/zone/without_soa_test.txt
index 842fd378..0baf6568 100644
--- a/lib/dns/testdata/zone/without_soa_test.txt
+++ b/lib/dns/testdata/zone/without_soa_test.txt
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2023 M. Shulhan <ms@kilabit.info>
+
origin: localdomain
ttl: 3600
diff --git a/lib/dns/testdata/zoneParser_next_test.txt b/lib/dns/testdata/zoneParser_next_test.txt
index 9c1b02bb..ea8c6b3e 100644
--- a/lib/dns/testdata/zoneParser_next_test.txt
+++ b/lib/dns/testdata/zoneParser_next_test.txt
@@ -1,3 +1,5 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2024 M. Shulhan <ms@kilabit.info>
>>> comments
a b ; c d
diff --git a/lib/dns/testdata/zone_soa_test.txt b/lib/dns/testdata/zone_soa_test.txt
index 83ea37bd..f54fcd43 100644
--- a/lib/dns/testdata/zone_soa_test.txt
+++ b/lib/dns/testdata/zone_soa_test.txt
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2023 M. Shulhan <ms@kilabit.info>
+
<<< NewZone
$ORIGIN test.soa.
@ SOA test.soa. root 1691222000 86400 3600 0 3600
diff --git a/lib/dns/udp_client.go b/lib/dns/udp_client.go
index 0769b1e8..ab64befe 100644
--- a/lib/dns/udp_client.go
+++ b/lib/dns/udp_client.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package dns
diff --git a/lib/dns/udp_client_example_test.go b/lib/dns/udp_client_example_test.go
index 836a6631..639fe8aa 100644
--- a/lib/dns/udp_client_example_test.go
+++ b/lib/dns/udp_client_example_test.go
@@ -1,6 +1,5 @@
-// Copyright 2021, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2021 Shulhan <ms@kilabit.info>
package dns
diff --git a/lib/dns/udp_client_test.go b/lib/dns/udp_client_test.go
index 76af0da2..a69f638f 100644
--- a/lib/dns/udp_client_test.go
+++ b/lib/dns/udp_client_test.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package dns
diff --git a/lib/dns/zone.go b/lib/dns/zone.go
index 4fbc9700..249e86da 100644
--- a/lib/dns/zone.go
+++ b/lib/dns/zone.go
@@ -1,6 +1,5 @@
-// Copyright 2020, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2020 Shulhan <ms@kilabit.info>
package dns
diff --git a/lib/dns/zone_parser_test.go b/lib/dns/zone_parser_test.go
index ff51fcc2..3185d3a7 100644
--- a/lib/dns/zone_parser_test.go
+++ b/lib/dns/zone_parser_test.go
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2023 M. Shulhan <ms@kilabit.info>
+
package dns
import (
diff --git a/lib/dsv/README.html b/lib/dsv/README.html
deleted file mode 100644
index cf1c2e8b..00000000
--- a/lib/dsv/README.html
+++ /dev/null
@@ -1,365 +0,0 @@
-<!DOCTYPE html>
-<html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1" />
- <meta name="theme-color" content="#375EAB" />
-
- <title></title>
- </head>
- <body>
- <div class="topbar">
- <div class="container">
- <div class="top-heading">
- <a href="/">github.com/shuLhan/share</a>
- </div>
- <div class="menu">
- <a href="https://godoc.org/github.com/shuLhan/share">GoDoc</a>
- </div>
- <div class="menu">
- <a href="/CHANGELOG.html">Changelog</a>
- </div>
- </div>
- </div>
-
- <div class="page">
- <div class="container">
- <h1></h1>
- <p><a href="https://godoc.org/github.com/shuLhan/share/lib/dsv"><img src="https://godoc.org/github.com/shuLhan/share/lib/dsv?status.svg" alt="GoDoc"></a>
-<a href="https://goreportcard.com/report/github.com/shuLhan/share/lib/dsv"><img src="https://goreportcard.com/badge/github.com/shuLhan/share/lib/dsv" alt="Go Report Card"></a></p>
-<p>Package <code>dsv</code> is a Go library for working with delimited separated value (DSV).</p>
-<p>DSV is a free-style form of CSV format of text data, where each record is
-separated by newline, and each column can be separated by any string, not just
-comma.</p>
-<ul>
-<li><a href="#example">Example</a></li>
-<li><a href="#terminology">Terminology</a></li>
-<li><a href="#configuration">Configuration</a>
-<ul>
-<li><a href="#metadata">Metadata</a></li>
-<li><a href="#input">Input</a>
-<ul>
-<li><a href="#datasetmode-explained">DatasetMode Explained</a></li>
-</ul>
-</li>
-<li><a href="#output">Output</a></li>
-</ul>
-</li>
-<li><a href="#working-with-dsv">Working with DSV</a>
-<ul>
-<li><a href="#processing-each-rowscolumns">Processing each Rows/Columns</a></li>
-<li><a href="#using-different-dataset">Using different Dataset</a></li>
-<li><a href="#builtin-functions-for-dataset">Builtin Functions for Dataset</a></li>
-</ul>
-</li>
-<li><a href="#limitations">Limitations</a></li>
-</ul>
-<hr>
-<h2>Example</h2>
-<p>Lets process this input file <code>input.dat</code>,</p>
-<pre><code>Mon Dt HH MM SS Process
-Nov 29 23:14:36 process-1
-Nov 29 23:14:37 process-2
-Nov 29 23:14:38 process-3
-</code></pre>
-<p>and generate output file <code>output.dat</code> which format like this,</p>
-<pre><code>&quot;process_1&quot;,&quot;29-Nov&quot;
-&quot;process_2&quot;,&quot;29-Nov&quot;
-&quot;process_3&quot;,&quot;29-Nov&quot;
-</code></pre>
-<p>How do we do it?</p>
-<p>First, create file metadata for input and output, name it <code>config.dsv</code>,</p>
-<pre><code>{
- &quot;Input&quot; :&quot;input.dat&quot;
-, &quot;Skip&quot; :1
-, &quot;InputMetadata&quot; :
- [{
- &quot;Name&quot; :&quot;month&quot;
- , &quot;Separator&quot; :&quot; &quot;
- },{
- &quot;Name&quot; :&quot;date&quot;
- , &quot;Separator&quot; :&quot; &quot;
- , &quot;Type&quot; :&quot;integer&quot;
- },{
- &quot;Name&quot; :&quot;hour&quot;
- , &quot;Separator&quot; :&quot;:&quot;
- , &quot;Type&quot; :&quot;integer&quot;
- },{
- &quot;Name&quot; :&quot;minute&quot;
- , &quot;Separator&quot; :&quot;:&quot;
- , &quot;Type&quot; :&quot;integer&quot;
- },{
- &quot;Name&quot; :&quot;second&quot;
- , &quot;Separator&quot; :&quot; &quot;
- , &quot;Type&quot; :&quot;integer&quot;
- },{
- &quot;Name&quot; :&quot;process_name&quot;
- , &quot;Separator&quot; :&quot;-&quot;
- },{
- &quot;Name&quot; :&quot;process_id&quot;
- }]
-, &quot;Output&quot; :&quot;output.dat&quot;
-, &quot;OutputMetadata&quot;:
- [{
- &quot;Name&quot; :&quot;process_name&quot;
- , &quot;LeftQuote&quot; :&quot;\&quot;&quot;
- , &quot;Separator&quot; :&quot;_&quot;
- },{
- &quot;Name&quot; :&quot;process_id&quot;
- , &quot;RightQuote&quot;:&quot;\&quot;&quot;
- , &quot;Separator&quot; :&quot;,&quot;
- },{
- &quot;Name&quot; :&quot;date&quot;
- , &quot;LeftQuote&quot; :&quot;\&quot;&quot;
- , &quot;Separator&quot; :&quot;-&quot;
- },{
- &quot;Name&quot; :&quot;month&quot;
- , &quot;RightQuote&quot;:&quot;\&quot;&quot;
- }]
-}
-</code></pre>
-<p>The metadata is using JSON format. For more information see <code>metadata.go</code>
-and <code>reader.go</code>.</p>
-<p>Second, we create a reader to read the input file.</p>
-<pre><code>dsvReader, e := dsv.NewReader(&quot;config.dsv&quot;, nil)
-
-if nil != e {
- t.Fatal(e)
-}
-</code></pre>
-<p>Third, we create a writer to write our output data,</p>
-<pre><code>dsvWriter, e := dsv.NewWriter(&quot;config.dsv&quot;)
-
-if nil != e {
- t.Error(e)
-}
-</code></pre>
-<p>Last action, we process them: read input records and pass them to writer.</p>
-<pre><code>for {
- n, e := dsv.Read(dsvReader)
-
- if n &gt; 0 {
- dsvWriter.Write(dsvReader)
-
- // EOF, no more record.
- } else if e == io.EOF {
- break
- }
-}
-
-// we will make sure all open descriptor is closed.
-_ = dsvReader.Close()
-</code></pre>
-<p>Easy enough? We can combine the reader and writer using <code>dsv.New()</code>, which will
-create reader and writer,</p>
-<pre><code>rw, e := dsv.New(&quot;config.dsv&quot;, nil)
-
-if nil != e {
- t.Error(e)
-}
-
-// do usual process like in the last step.
-</code></pre>
-<p>Thats it!</p>
-<h2>Terminology</h2>
-<p>Here are some terminology that we used in developing this library, which may
-help reader understanding the configuration and API.</p>
-<ul>
-<li>Dataset: is a content of file</li>
-<li>Record: a single cell in row or column, or the smallest building block of
-dataset</li>
-<li>Row: is a horizontal representation of records in dataset</li>
-<li>Column: is a vertical representation of records in dataset</li>
-</ul>
-<pre><code> COL-0 COL-1 ... COL-x
-ROW-0: record record ... record
-ROW-1: record record ... record
-...
-ROW-y: record record ... record
-</code></pre>
-<h2>Configuration</h2>
-<p>We choose and use JSON for configuration because,</p>
-<ol>
-<li>No additional source to test.</li>
-<li>Easy to extended. User can embed the current metadata, add additional
-configuration, and create another reader to work with it.</li>
-</ol>
-<h3>Metadata</h3>
-<p>Metadata contain information about each column when reading input file and
-writing to output file,</p>
-<ul>
-<li><code>Name</code>: mandatory, the name of column</li>
-<li><code>Type</code>: optional, type of record when reading input file. Valid value are
-&quot;integer&quot;, &quot;real&quot;, or &quot;string&quot; (default)</li>
-<li><code>Separator</code>: optional, default to <code>&quot;\n&quot;</code>. Separator is a string that
-separate the current record with the next record.</li>
-<li><code>LeftQuote</code>: optional, default is empty <code>&quot;&quot;</code>. LeftQuote is a string that
-start at the beginning of record.</li>
-<li><code>RightQuote</code>: optional, default is empty <code>&quot;&quot;</code>. RightQuote is a string at the
-end of record.</li>
-<li><code>Skip</code>: optional, boolean, default is <code>false</code>. If true the column will be
-saved in dataset when reading input file, otherwise it will be ignored.</li>
-<li><code>ValueSpace</code>: optional, slice of string, default is empty. This contain the
-string representation of all possible value in column.</li>
-</ul>
-<h3>Input</h3>
-<p>Input configuration contain information about input file.</p>
-<ul>
-<li><code>Input</code>: mandatory, the name of input file, could use relative or absolute
-path. If no path is given then it assumed that the input file is in the same
-directory with configuration file.</li>
-<li><code>InputMetadata</code>: mandatory, list of metadata.</li>
-<li><code>Skip</code>: optional, number, default 0. Skip define the number of line that will
-be skipped when first input file is opened.</li>
-<li><code>TrimSpace</code>: optional, boolean, default is true. If its true, before parsed, the
-white space in the beginning and end of each input line will be removed,
-otherwise it will leave unmodified.</li>
-<li><code>Rejected</code>: optional, default to <code>rejected.dat</code>. Rejected is file where
-data that does not match with metadata will be saved. One can inspect the
-rejected file fix it for re-process or ignore it.</li>
-<li><code>MaxRows</code>: optional, default to <code>256</code>. Maximum number of rows for one read
-operation that will be saved in memory. If its negative, i.e. <code>-1</code>, all data
-in input file will be processed.</li>
-<li><code>DatasetMode</code>: optional, default to &quot;rows&quot;. Mode of dataset in memory.
-Valid values are &quot;rows&quot;, &quot;columns&quot;, or &quot;matrix&quot;. Matrix mode is combination of
-rows and columns, it give more flexibility when processing the dataset but
-will require additional memory.</li>
-</ul>
-<h4><code>DatasetMode</code> Explained</h4>
-<p>For example, given input data file,</p>
-<pre><code>col1,col2,col3
-a,b,c
-1,2,3
-</code></pre>
-<p>&quot;rows&quot; mode is where each line saved in its own slice, resulting in Rows:</p>
-<pre><code>Rows[0]: [a b c]
-Rows[1]: [1 2 3]
-</code></pre>
-<p>&quot;columns&quot; mode is where each line saved by columns, resulting in Columns:</p>
-<pre><code>Columns[0]: {col1 0 0 [] [a 1]}
-Columns[1]: {col2 0 0 [] [b 2]}
-Columns[1]: {col3 0 0 [] [c 3]}
-</code></pre>
-<p>Unlike rows mode, each column contain metadata including column name, type,
-flag, and value space (all possible value that <em>may</em> contain in column value).</p>
-<p>&quot;matrix&quot; mode is where each record saved both in row and column.</p>
-<h3>Output</h3>
-<p>Output configuration contain information about output file when writing the
-dataset.</p>
-<ul>
-<li><code>Output</code>: mandatory, the name of output file, could use relative or absolute
-path. If no path is given then it assumed that the output file is in the same
-directory with configuration file.</li>
-<li><code>OutputMetadata</code>: mandatory, list of metadata.</li>
-</ul>
-<h2>Working with DSV</h2>
-<h3>Processing each Rows/Columns</h3>
-<p>After opening the input file, we can process the dataset based on rows/columns
-mode using simple <code>for</code> loop. Example,</p>
-<pre><code>// Save dataset object for used later.
-dataset := dsvReader.GetDataset().(tabula.DatasetInterface)
-
-for {
- n, e := dsv.Read(dsvReader)
-
- if n &gt; 0 {
- // Process each row ...
- for x, row := dataset.GetDataAsRows() {
-
- for y, record := range row.Records {
- // process each record in row
- }
- }
-
- // Or, process each columns
- for x, column := dataset.GetDataAsColumns() {
-
- for y, record := range column.Records {
- // process each record in column
- }
- }
-
- // Write the dataset to file after processed
- dsvWriter.Write(dsvReader)
- }
- if e == io.EOF {
- break
- }
- if e != nil {
- // handle error
- }
-}
-</code></pre>
-<h3>Using different Dataset</h3>
-<p>Default dataset used by Reader is
-<a href="https://godoc.org/github.com/shuLhan/share/lib/tabula#Dataset">tabula.Dataset</a>.</p>
-<p>You can extend and implement
-<a href="https://godoc.org/github.com/shuLhan/share/lib/tabula#DatasetInterface">DatasetInterface</a>
-and use it in reader object, either by</p>
-<ul>
-<li>
-<p>passing it in the second parameter in <code>NewReader</code>, for example,</p>
-<pre><code>myset := MySet{
- ...
-}
-reader, e := dsv.NewReader(&quot;config.dsv&quot;, &amp;myset)
-</code></pre>
-</li>
-<li>
-<p>or by calling <code>reader.Init</code> after creating new Reader,</p>
-<pre><code>myset := MySet{
- ...
-}
-reader := dsv.Reader{
- ...
-}
-reader.Init(&quot;config.dsv&quot;, &amp;myset)
-</code></pre>
-</li>
-</ul>
-<h3>Builtin Functions for Dataset</h3>
-<p>Since we use tabula package to manage data, any features in those package
-can be used in our dataset.
-For more information see <a href="https://godoc.org/github.com/shuLhan/share/lib/tabula">tabula
-package</a>.</p>
-<h2>Limitations</h2>
-<ul>
-<li>
-<p>New line is <code>\n</code> for each row.</p>
-</li>
-<li>
-<p>Reader and Writer operate in ASCII (8 bit or char type), UTF-8 is not
-supported yet, since we can not test it. Patch for supporting UTF-8 (or
-runes type) are welcome.</p>
-</li>
-<li>
-<p>About escaped character in content of data.</p>
-<p>Since we said that we handle free-style form of CSV, what we mean was the
-left-quote, right-quote and separator can be string. Its not only one single
-character like single quote or double quote or any single character, but
-literally one or more characters without space. Any escaped character will be
-read as is (along with <code>'\'</code>) unless its followed by right-quote or separator.
-For example,</p>
-<pre><code>&quot;test\'&quot;
-</code></pre>
-<p>will be readed as <code>test\'</code>. But</p>
-<pre><code>&quot;test\&quot;&quot;
-</code></pre>
-<p>will be readed as <code>test&quot;</code>, since the right-quote is matched with escaped
-token.</p>
-</li>
-</ul>
-
- </div>
-
- </div>
-
-
- <div class="footer">
- Copyright 2019, Shulhan &lt;ms@kilabit.info&gt;. All rights reserved.
- <br />
- Use of this source code is governed by a BSD-style license that can be
- found in the <a href="/LICENSE">LICENSE</a> file.
- </div>
- </body>
-</html>
diff --git a/lib/dsv/README.md b/lib/dsv/README.md
index f2612ff4..74391ded 100644
--- a/lib/dsv/README.md
+++ b/lib/dsv/README.md
@@ -1,3 +1,6 @@
+<!-- SPDX-License-Identifier: BSD-3-Clause -->
+<!-- SPDX-FileCopyrightText: 2018 M. Shulhan <ms@kilabit.info> -->
+
[![GoDoc](https://godoc.org/git.sr.ht/~shulhan/pakakeh.go/lib/dsv?status.svg)](https://godoc.org/git.sr.ht/~shulhan/pakakeh.go/lib/dsv)
[![Go Report Card](https://goreportcard.com/badge/git.sr.ht/~shulhan/pakakeh.go/lib/dsv)](https://goreportcard.com/report/git.sr.ht/~shulhan/pakakeh.go/lib/dsv)
diff --git a/lib/dsv/claset_test.go b/lib/dsv/claset_test.go
index 53838756..e5148eee 100644
--- a/lib/dsv/claset_test.go
+++ b/lib/dsv/claset_test.go
@@ -1,6 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 M. Shulhan <ms@kilabit.info>
// Copyright 2015-2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
package dsv
diff --git a/lib/dsv/common_test.go b/lib/dsv/common_test.go
index 8e43aa27..69f7878c 100644
--- a/lib/dsv/common_test.go
+++ b/lib/dsv/common_test.go
@@ -1,6 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 M. Shulhan <ms@kilabit.info>
// Copyright 2015-2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
package dsv
diff --git a/lib/dsv/config.go b/lib/dsv/config.go
index 3b1d38e2..a2d5adaa 100644
--- a/lib/dsv/config.go
+++ b/lib/dsv/config.go
@@ -1,6 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 M. Shulhan <ms@kilabit.info>
// Copyright 2015-2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
package dsv
diff --git a/lib/dsv/data_test.go b/lib/dsv/data_test.go
index ffb922fd..a5304e7b 100644
--- a/lib/dsv/data_test.go
+++ b/lib/dsv/data_test.go
@@ -1,6 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 M. Shulhan <ms@kilabit.info>
// Copyright 2015-2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
package dsv
diff --git a/lib/dsv/dsv_test.go b/lib/dsv/dsv_test.go
index f1454a00..5309d52f 100644
--- a/lib/dsv/dsv_test.go
+++ b/lib/dsv/dsv_test.go
@@ -1,6 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 M. Shulhan <ms@kilabit.info>
// Copyright 2015-2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
package dsv
diff --git a/lib/dsv/metadata.go b/lib/dsv/metadata.go
index 99b951ca..8b7b6ed2 100644
--- a/lib/dsv/metadata.go
+++ b/lib/dsv/metadata.go
@@ -1,6 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 M. Shulhan <ms@kilabit.info>
// Copyright 2015-2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
package dsv
diff --git a/lib/dsv/metadata_test.go b/lib/dsv/metadata_test.go
index 0d602adb..cd1fb065 100644
--- a/lib/dsv/metadata_test.go
+++ b/lib/dsv/metadata_test.go
@@ -1,6 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 M. Shulhan <ms@kilabit.info>
// Copyright 2015-2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
package dsv
diff --git a/lib/dsv/metadatainterface.go b/lib/dsv/metadatainterface.go
index 360109f6..58e711b6 100644
--- a/lib/dsv/metadatainterface.go
+++ b/lib/dsv/metadatainterface.go
@@ -1,6 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 M. Shulhan <ms@kilabit.info>
// Copyright 2015-2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
package dsv
diff --git a/lib/dsv/readererror.go b/lib/dsv/readererror.go
index 8b56633c..a42360fa 100644
--- a/lib/dsv/readererror.go
+++ b/lib/dsv/readererror.go
@@ -1,6 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 M. Shulhan <ms@kilabit.info>
// Copyright 2015-2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
package dsv
diff --git a/lib/dsv/writer.go b/lib/dsv/writer.go
index 65c9298c..88b34699 100644
--- a/lib/dsv/writer.go
+++ b/lib/dsv/writer.go
@@ -1,6 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 M. Shulhan <ms@kilabit.info>
// Copyright 2015-2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
package dsv
diff --git a/lib/dsv/writer_test.go b/lib/dsv/writer_test.go
index e8ef2af7..a1948de6 100644
--- a/lib/dsv/writer_test.go
+++ b/lib/dsv/writer_test.go
@@ -1,6 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 M. Shulhan <ms@kilabit.info>
// Copyright 2015-2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
package dsv
diff --git a/lib/dsv/writerinterface.go b/lib/dsv/writerinterface.go
index fc1e0fcc..622d41bf 100644
--- a/lib/dsv/writerinterface.go
+++ b/lib/dsv/writerinterface.go
@@ -1,6 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 M. Shulhan <ms@kilabit.info>
// Copyright 2015-2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
package dsv
diff --git a/lib/email/body_test.go b/lib/email/body_test.go
index c08be406..f4e31b02 100644
--- a/lib/email/body_test.go
+++ b/lib/email/body_test.go
@@ -1,6 +1,5 @@
-// Copyright 2019, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 Shulhan <ms@kilabit.info>
package email
diff --git a/lib/email/contenttype_example_test.go b/lib/email/contenttype_example_test.go
index 19b5e2c4..2a895472 100644
--- a/lib/email/contenttype_example_test.go
+++ b/lib/email/contenttype_example_test.go
@@ -1,6 +1,5 @@
-// Copyright 2023, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2023 Shulhan <ms@kilabit.info>
package email_test
diff --git a/lib/email/contenttype_test.go b/lib/email/contenttype_test.go
index b52bbdfc..51738cb6 100644
--- a/lib/email/contenttype_test.go
+++ b/lib/email/contenttype_test.go
@@ -1,6 +1,5 @@
-// Copyright 2019, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 Shulhan <ms@kilabit.info>
package email
diff --git a/lib/email/dkim/canon.go b/lib/email/dkim/canon.go
index 0aa03c37..68263d7d 100644
--- a/lib/email/dkim/canon.go
+++ b/lib/email/dkim/canon.go
@@ -1,6 +1,5 @@
-// Copyright 2019, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 Shulhan <ms@kilabit.info>
package dkim
diff --git a/lib/email/dkim/dkim.go b/lib/email/dkim/dkim.go
index 976a066a..5b2e26f2 100644
--- a/lib/email/dkim/dkim.go
+++ b/lib/email/dkim/dkim.go
@@ -1,6 +1,5 @@
-// Copyright 2019, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 Shulhan <ms@kilabit.info>
package dkim
diff --git a/lib/email/dkim/dkim_test.go b/lib/email/dkim/dkim_test.go
index cfff75af..15fc791f 100644
--- a/lib/email/dkim/dkim_test.go
+++ b/lib/email/dkim/dkim_test.go
@@ -1,6 +1,5 @@
-// Copyright 2019, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 Shulhan <ms@kilabit.info>
package dkim
diff --git a/lib/email/dkim/dns.go b/lib/email/dkim/dns.go
index dc6af004..67469827 100644
--- a/lib/email/dkim/dns.go
+++ b/lib/email/dkim/dns.go
@@ -1,6 +1,5 @@
-// Copyright 2019, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 Shulhan <ms@kilabit.info>
package dkim
diff --git a/lib/email/dkim/dns_test.go b/lib/email/dkim/dns_test.go
index a6158da5..3520fc84 100644
--- a/lib/email/dkim/dns_test.go
+++ b/lib/email/dkim/dns_test.go
@@ -1,6 +1,5 @@
-// Copyright 2019, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 Shulhan <ms@kilabit.info>
package dkim
diff --git a/lib/email/dkim/doc.go b/lib/email/dkim/doc.go
index b0e9a2a8..98b26641 100644
--- a/lib/email/dkim/doc.go
+++ b/lib/email/dkim/doc.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
// Package dkim provide a library to parse and create DKIM-Signature header
// field value, as defined in RFC 6376, DomainKeys Identified Mail (DKIM)
diff --git a/lib/email/dkim/func_test.go b/lib/email/dkim/func_test.go
index d1845337..c7ac8dca 100644
--- a/lib/email/dkim/func_test.go
+++ b/lib/email/dkim/func_test.go
@@ -1,6 +1,5 @@
-// Copyright 2019, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 Shulhan <ms@kilabit.info>
package dkim
diff --git a/lib/email/dkim/hashalg_test.go b/lib/email/dkim/hashalg_test.go
index c2b25292..d9713557 100644
--- a/lib/email/dkim/hashalg_test.go
+++ b/lib/email/dkim/hashalg_test.go
@@ -1,6 +1,5 @@
-// Copyright 2019, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 Shulhan <ms@kilabit.info>
package dkim
diff --git a/lib/email/dkim/key.go b/lib/email/dkim/key.go
index 31b23061..9c87f94e 100644
--- a/lib/email/dkim/key.go
+++ b/lib/email/dkim/key.go
@@ -1,6 +1,5 @@
-// Copyright 2019, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 Shulhan <ms@kilabit.info>
package dkim
diff --git a/lib/email/dkim/key_test.go b/lib/email/dkim/key_test.go
index 87c925ba..15f9d45a 100644
--- a/lib/email/dkim/key_test.go
+++ b/lib/email/dkim/key_test.go
@@ -1,6 +1,5 @@
-// Copyright 2019, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 Shulhan <ms@kilabit.info>
package dkim
diff --git a/lib/email/dkim/keypool.go b/lib/email/dkim/keypool.go
index 2ebc93a6..9a540933 100644
--- a/lib/email/dkim/keypool.go
+++ b/lib/email/dkim/keypool.go
@@ -1,6 +1,5 @@
-// Copyright 2019, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 Shulhan <ms@kilabit.info>
package dkim
diff --git a/lib/email/dkim/keypool_test.go b/lib/email/dkim/keypool_test.go
index 7290c7b8..072c0750 100644
--- a/lib/email/dkim/keypool_test.go
+++ b/lib/email/dkim/keypool_test.go
@@ -1,6 +1,5 @@
-// Copyright 2019, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 Shulhan <ms@kilabit.info>
package dkim
diff --git a/lib/email/dkim/keytype.go b/lib/email/dkim/keytype.go
index aa3b0806..76b0e802 100644
--- a/lib/email/dkim/keytype.go
+++ b/lib/email/dkim/keytype.go
@@ -1,6 +1,5 @@
-// Copyright 2019, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 Shulhan <ms@kilabit.info>
package dkim
diff --git a/lib/email/dkim/parser.go b/lib/email/dkim/parser.go
index a5523ba5..ce9e811c 100644
--- a/lib/email/dkim/parser.go
+++ b/lib/email/dkim/parser.go
@@ -1,6 +1,5 @@
-// Copyright 2019, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 Shulhan <ms@kilabit.info>
package dkim
diff --git a/lib/email/dkim/querymethod.go b/lib/email/dkim/querymethod.go
index 568c8b38..1e630135 100644
--- a/lib/email/dkim/querymethod.go
+++ b/lib/email/dkim/querymethod.go
@@ -1,6 +1,5 @@
-// Copyright 2019, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 Shulhan <ms@kilabit.info>
package dkim
diff --git a/lib/email/dkim/queryoption.go b/lib/email/dkim/queryoption.go
index a1fa1023..0ddcef84 100644
--- a/lib/email/dkim/queryoption.go
+++ b/lib/email/dkim/queryoption.go
@@ -1,6 +1,5 @@
-// Copyright 2019, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 Shulhan <ms@kilabit.info>
package dkim
diff --git a/lib/email/dkim/querytype.go b/lib/email/dkim/querytype.go
index 376ff0d0..ae3b291b 100644
--- a/lib/email/dkim/querytype.go
+++ b/lib/email/dkim/querytype.go
@@ -1,6 +1,5 @@
-// Copyright 2019, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 Shulhan <ms@kilabit.info>
package dkim
diff --git a/lib/email/dkim/signalg.go b/lib/email/dkim/signalg.go
index bca8097f..ce298d7a 100644
--- a/lib/email/dkim/signalg.go
+++ b/lib/email/dkim/signalg.go
@@ -1,6 +1,5 @@
-// Copyright 2019, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 Shulhan <ms@kilabit.info>
package dkim
diff --git a/lib/email/dkim/signature_test.go b/lib/email/dkim/signature_test.go
index cd49902e..7f9645b5 100644
--- a/lib/email/dkim/signature_test.go
+++ b/lib/email/dkim/signature_test.go
@@ -1,6 +1,5 @@
-// Copyright 2019, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 Shulhan <ms@kilabit.info>
package dkim
diff --git a/lib/email/dkim/status.go b/lib/email/dkim/status.go
index e9885100..07fe2400 100644
--- a/lib/email/dkim/status.go
+++ b/lib/email/dkim/status.go
@@ -1,6 +1,5 @@
-// Copyright 2019, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 Shulhan <ms@kilabit.info>
package dkim
diff --git a/lib/email/dkim/statustype.go b/lib/email/dkim/statustype.go
index 0401a032..4fd10f0e 100644
--- a/lib/email/dkim/statustype.go
+++ b/lib/email/dkim/statustype.go
@@ -1,6 +1,5 @@
-// Copyright 2019, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 Shulhan <ms@kilabit.info>
package dkim
diff --git a/lib/email/dkim/tag_test.go b/lib/email/dkim/tag_test.go
index 6d0cd8bd..5a83259a 100644
--- a/lib/email/dkim/tag_test.go
+++ b/lib/email/dkim/tag_test.go
@@ -1,6 +1,5 @@
-// Copyright 2019, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 Shulhan <ms@kilabit.info>
package dkim
diff --git a/lib/email/doc.go b/lib/email/doc.go
index d0983aab..53a31a43 100644
--- a/lib/email/doc.go
+++ b/lib/email/doc.go
@@ -1,6 +1,5 @@
-// Copyright 2019, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 Shulhan <ms@kilabit.info>
// Package email provide a library for working with Internet Message Format as
// defined in [RFC 5322].
diff --git a/lib/email/email.go b/lib/email/email.go
index 3fdcd3b8..7205c785 100644
--- a/lib/email/email.go
+++ b/lib/email/email.go
@@ -1,6 +1,5 @@
-// Copyright 2019, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 Shulhan <ms@kilabit.info>
package email
diff --git a/lib/email/email_test.go b/lib/email/email_test.go
index dcc68019..1c08b470 100644
--- a/lib/email/email_test.go
+++ b/lib/email/email_test.go
@@ -1,6 +1,5 @@
-// Copyright 2019, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 Shulhan <ms@kilabit.info>
package email
diff --git a/lib/email/field_test.go b/lib/email/field_test.go
index b3716bf1..fd058380 100644
--- a/lib/email/field_test.go
+++ b/lib/email/field_test.go
@@ -1,6 +1,5 @@
-// Copyright 2019, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 Shulhan <ms@kilabit.info>
package email
diff --git a/lib/email/fieldtype.go b/lib/email/fieldtype.go
index eccc4008..abc3cd39 100644
--- a/lib/email/fieldtype.go
+++ b/lib/email/fieldtype.go
@@ -1,6 +1,5 @@
-// Copyright 2019, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 Shulhan <ms@kilabit.info>
package email
diff --git a/lib/email/header.go b/lib/email/header.go
index 10f84b86..1e275d70 100644
--- a/lib/email/header.go
+++ b/lib/email/header.go
@@ -1,6 +1,5 @@
-// Copyright 2019, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 Shulhan <ms@kilabit.info>
package email
diff --git a/lib/email/header_example_test.go b/lib/email/header_example_test.go
index e5a3f4d3..20829d6d 100644
--- a/lib/email/header_example_test.go
+++ b/lib/email/header_example_test.go
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2023 M. Shulhan <ms@kilabit.info>
+
package email_test
import (
diff --git a/lib/email/header_test.go b/lib/email/header_test.go
index e6b42d98..4e441310 100644
--- a/lib/email/header_test.go
+++ b/lib/email/header_test.go
@@ -1,6 +1,5 @@
-// Copyright 2019, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 Shulhan <ms@kilabit.info>
package email
diff --git a/lib/email/is_benchmark_test.go b/lib/email/is_benchmark_test.go
index 69d105f3..88fb6d9f 100644
--- a/lib/email/is_benchmark_test.go
+++ b/lib/email/is_benchmark_test.go
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2023 M. Shulhan <ms@kilabit.info>
+
package email
import "testing"
diff --git a/lib/email/is_test.go b/lib/email/is_test.go
index 61c02c93..6ba550e5 100644
--- a/lib/email/is_test.go
+++ b/lib/email/is_test.go
@@ -1,6 +1,5 @@
-// Copyright 2019, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 Shulhan <ms@kilabit.info>
package email
diff --git a/lib/email/mailbox.go b/lib/email/mailbox.go
index 5e574bd5..02ac6e72 100644
--- a/lib/email/mailbox.go
+++ b/lib/email/mailbox.go
@@ -1,6 +1,5 @@
-// Copyright 2019, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 Shulhan <ms@kilabit.info>
package email
diff --git a/lib/email/mailbox_example_test.go b/lib/email/mailbox_example_test.go
index 6b38a3fa..1bd706f2 100644
--- a/lib/email/mailbox_example_test.go
+++ b/lib/email/mailbox_example_test.go
@@ -1,6 +1,5 @@
-// Copyright 2021, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2021 Shulhan <ms@kilabit.info>
package email
diff --git a/lib/email/mailbox_test.go b/lib/email/mailbox_test.go
index 2f37c99c..50d27d3e 100644
--- a/lib/email/mailbox_test.go
+++ b/lib/email/mailbox_test.go
@@ -1,6 +1,5 @@
-// Copyright 2019, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 Shulhan <ms@kilabit.info>
package email
diff --git a/lib/email/maildir/filename.go b/lib/email/maildir/filename.go
index 6e98059b..72d09bdf 100644
--- a/lib/email/maildir/filename.go
+++ b/lib/email/maildir/filename.go
@@ -1,6 +1,5 @@
-// Copyright 2023, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2023 Shulhan <ms@kilabit.info>
package maildir
diff --git a/lib/email/maildir/filename_test.go b/lib/email/maildir/filename_test.go
index a1084a52..767d8f14 100644
--- a/lib/email/maildir/filename_test.go
+++ b/lib/email/maildir/filename_test.go
@@ -1,6 +1,5 @@
-// Copyright 2023, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2023 Shulhan <ms@kilabit.info>
package maildir
diff --git a/lib/email/maildir/folder.go b/lib/email/maildir/folder.go
index fc550abf..5bc7164c 100644
--- a/lib/email/maildir/folder.go
+++ b/lib/email/maildir/folder.go
@@ -1,6 +1,5 @@
-// Copyright 2023, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2023 Shulhan <ms@kilabit.info>
package maildir
diff --git a/lib/email/maildir/folder_darwin_test.go b/lib/email/maildir/folder_darwin_test.go
index 9d8c2ade..e1adc7ad 100644
--- a/lib/email/maildir/folder_darwin_test.go
+++ b/lib/email/maildir/folder_darwin_test.go
@@ -1,6 +1,5 @@
-// Copyright 2023, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2023 Shulhan <ms@kilabit.info>
package maildir
diff --git a/lib/email/maildir/folder_linux_test.go b/lib/email/maildir/folder_linux_test.go
index 9b507b9a..1d3875ec 100644
--- a/lib/email/maildir/folder_linux_test.go
+++ b/lib/email/maildir/folder_linux_test.go
@@ -1,6 +1,5 @@
-// Copyright 2023, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2023 Shulhan <ms@kilabit.info>
package maildir
diff --git a/lib/email/maildir/folder_test.go b/lib/email/maildir/folder_test.go
index 7718f12f..7bc8c792 100644
--- a/lib/email/maildir/folder_test.go
+++ b/lib/email/maildir/folder_test.go
@@ -1,6 +1,5 @@
-// Copyright 2023, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2023 Shulhan <ms@kilabit.info>
package maildir
diff --git a/lib/email/maildir/maildir.go b/lib/email/maildir/maildir.go
index 78d19f33..4af20cca 100644
--- a/lib/email/maildir/maildir.go
+++ b/lib/email/maildir/maildir.go
@@ -1,6 +1,5 @@
-// Copyright 2023, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2023 Shulhan <ms@kilabit.info>
// Package maildir provide a library to manage message (email), and its
// folder, using maildir format.
diff --git a/lib/email/maildir/maildir_test.go b/lib/email/maildir/maildir_test.go
index 149325f7..95203217 100644
--- a/lib/email/maildir/maildir_test.go
+++ b/lib/email/maildir/maildir_test.go
@@ -1,6 +1,5 @@
-// Copyright 2023, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2023 Shulhan <ms@kilabit.info>
package maildir
diff --git a/lib/email/maildir/manager.go b/lib/email/maildir/manager.go
index e0000dd3..52bc9364 100644
--- a/lib/email/maildir/manager.go
+++ b/lib/email/maildir/manager.go
@@ -1,6 +1,5 @@
-// Copyright 2019, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 Shulhan <ms@kilabit.info>
package maildir
diff --git a/lib/email/maildir/manager_darwin_test.go b/lib/email/maildir/manager_darwin_test.go
index 8dc7a2ed..0fe13ea0 100644
--- a/lib/email/maildir/manager_darwin_test.go
+++ b/lib/email/maildir/manager_darwin_test.go
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2023 M. Shulhan <ms@kilabit.info>
+
package maildir
import (
diff --git a/lib/email/maildir/manager_linux_test.go b/lib/email/maildir/manager_linux_test.go
index 7c4565c7..bd9e31e4 100644
--- a/lib/email/maildir/manager_linux_test.go
+++ b/lib/email/maildir/manager_linux_test.go
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2023 M. Shulhan <ms@kilabit.info>
+
package maildir
import (
diff --git a/lib/email/maildir/manager_test.go b/lib/email/maildir/manager_test.go
index aacbcf28..e7bcbbd6 100644
--- a/lib/email/maildir/manager_test.go
+++ b/lib/email/maildir/manager_test.go
@@ -1,6 +1,5 @@
-// Copyright 2019, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 Shulhan <ms@kilabit.info>
package maildir
diff --git a/lib/email/message_test.go b/lib/email/message_test.go
index 6d3515f4..6261f0f2 100644
--- a/lib/email/message_test.go
+++ b/lib/email/message_test.go
@@ -1,6 +1,5 @@
-// Copyright 2019, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 Shulhan <ms@kilabit.info>
package email
diff --git a/lib/email/mime.go b/lib/email/mime.go
index 8daef071..6c511bef 100644
--- a/lib/email/mime.go
+++ b/lib/email/mime.go
@@ -1,6 +1,5 @@
-// Copyright 2019, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 Shulhan <ms@kilabit.info>
package email
diff --git a/lib/email/mime_test.go b/lib/email/mime_test.go
index 6501551c..3dd56ea6 100644
--- a/lib/email/mime_test.go
+++ b/lib/email/mime_test.go
@@ -1,6 +1,5 @@
-// Copyright 2019, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 Shulhan <ms@kilabit.info>
package email
diff --git a/lib/email/param.go b/lib/email/param.go
index 1782eb38..5c2d524f 100644
--- a/lib/email/param.go
+++ b/lib/email/param.go
@@ -1,6 +1,5 @@
-// Copyright 2019, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 Shulhan <ms@kilabit.info>
package email
diff --git a/lib/email/testdata/message_newmultipart_test.txt b/lib/email/testdata/message_newmultipart_test.txt
index febe250d..ab8fbc89 100644
--- a/lib/email/testdata/message_newmultipart_test.txt
+++ b/lib/email/testdata/message_newmultipart_test.txt
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2023 M. Shulhan <ms@kilabit.info>
+
Test creating multipart message.
<<< message.txt
diff --git a/lib/email/testdata/message_packsingle_test.txt b/lib/email/testdata/message_packsingle_test.txt
index ad081d02..d65207d0 100644
--- a/lib/email/testdata/message_packsingle_test.txt
+++ b/lib/email/testdata/message_packsingle_test.txt
@@ -1,3 +1,5 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2023 M. Shulhan <ms@kilabit.info>
<<< body.txt
diff --git a/lib/email/testdata/message_quoted-printable_test.txt b/lib/email/testdata/message_quoted-printable_test.txt
index e8c7098a..51aeac2d 100644
--- a/lib/email/testdata/message_quoted-printable_test.txt
+++ b/lib/email/testdata/message_quoted-printable_test.txt
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2024 M. Shulhan <ms@kilabit.info>
+
Test parsing message with quoted printable.
>>> quoted-printable
diff --git a/lib/email/testdata/message_setbodytext_test.txt b/lib/email/testdata/message_setbodytext_test.txt
index 07dcceb1..de3cd4a2 100644
--- a/lib/email/testdata/message_setbodytext_test.txt
+++ b/lib/email/testdata/message_setbodytext_test.txt
@@ -1,3 +1,5 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2023 M. Shulhan <ms@kilabit.info>
<<< body1.txt
diff --git a/lib/errors/errors_example_test.go b/lib/errors/errors_example_test.go
index c630fd40..b8e03aba 100644
--- a/lib/errors/errors_example_test.go
+++ b/lib/errors/errors_example_test.go
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2023 M. Shulhan <ms@kilabit.info>
+
package errors_test
import (
diff --git a/lib/git/git_test.go b/lib/git/git_test.go
index f67fa1aa..7462ef1d 100644
--- a/lib/git/git_test.go
+++ b/lib/git/git_test.go
@@ -206,12 +206,6 @@ func TestGit_LogFollow(t *testing.T) {
}{{
path: `lib/_hunspell/affix.go`,
exp: []string{
- `144549f8,1737804887,Shulhan,ms@kilabit.info,lib/hunspell: rename the package to "_hunspell"`,
- `66e6542e,1694357806,Shulhan,ms@kilabit.info,lib/hunspell: realign struct for better size allocation`,
- `0c9abc1a,1652108042,Shulhan,ms@kilabit.info,all: reformat all codes using gofmt 1.19 (the Go tip)`,
- `9ca9757d,1591803682,Shulhan,m.shulhan@gmail.com,all: update email address`,
- `b0fa5a47,1585156612,Shulhan,m.shulhan@gmail.com,all: fix and suppress linter warnings`,
- `33d58b98,1585151378,Shulhan,m.shulhan@gmail.com,hunspell: add field Parent to Stem`,
`367e15a8,1585139124,Shulhan,m.shulhan@gmail.com,hunspell: change the stem.apply parameter from string to *Stem`,
`099a24de,1579628651,Shulhan,m.shulhan@gmail.com,hunspell: split the affix options and dictionary into different types`,
`3d772dff,1572967023,Shulhan,m.shulhan@gmail.com,lib/hunspell: implementation of hunspell in pure Go`,
@@ -231,6 +225,11 @@ func TestGit_LogFollow(t *testing.T) {
test.Assert(t, tc.path+` error`, tc.expError, err.Error())
continue
}
+ if len(logs) > 3 {
+ // Compare only the last 3 commits, since the file
+ // history may changes in the future.
+ logs = logs[len(logs)-3:]
+ }
test.Assert(t, tc.path, tc.exp, logs)
}
}
diff --git a/lib/git/testdata/IsIgnored/a/b/.gitignore b/lib/git/testdata/IsIgnored/a/b/.gitignore
index 120f485d..6cf38aa5 100644
--- a/lib/git/testdata/IsIgnored/a/b/.gitignore
+++ b/lib/git/testdata/IsIgnored/a/b/.gitignore
@@ -1,2 +1,4 @@
+# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-FileCopyrightText: 2026 M. Shulhan <ms@kilabit.info>
*
!/.gitignore
diff --git a/lib/html/benchmark_test.go b/lib/html/benchmark_test.go
index 05aa62d2..558276a1 100644
--- a/lib/html/benchmark_test.go
+++ b/lib/html/benchmark_test.go
@@ -1,6 +1,5 @@
-// Copyright 2022, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2022 Shulhan <ms@kilabit.info>
package html
diff --git a/lib/html/example_node_iterator_test.go b/lib/html/example_node_iterator_test.go
index 94ece050..277001f5 100644
--- a/lib/html/example_node_iterator_test.go
+++ b/lib/html/example_node_iterator_test.go
@@ -1,6 +1,5 @@
-// Copyright 2020, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2020 Shulhan <ms@kilabit.info>
package html
diff --git a/lib/html/example_test.go b/lib/html/example_test.go
index d0582555..67905535 100644
--- a/lib/html/example_test.go
+++ b/lib/html/example_test.go
@@ -1,6 +1,5 @@
-// Copyright 2022, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2022 Shulhan <ms@kilabit.info>
package html
diff --git a/lib/html/html.go b/lib/html/html.go
index 9f5324ab..1695420f 100644
--- a/lib/html/html.go
+++ b/lib/html/html.go
@@ -1,6 +1,5 @@
-// Copyright 2020, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2020 Shulhan <ms@kilabit.info>
// Package html extends the golang.org/x/net/html by providing simplified
// methods to Node.
diff --git a/lib/html/node.go b/lib/html/node.go
index ac00ac48..5fbb03c4 100644
--- a/lib/html/node.go
+++ b/lib/html/node.go
@@ -1,6 +1,5 @@
-// Copyright 2020, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2020 Shulhan <ms@kilabit.info>
package html
diff --git a/lib/html/node_iterator.go b/lib/html/node_iterator.go
index ca1819d4..bc1a9154 100644
--- a/lib/html/node_iterator.go
+++ b/lib/html/node_iterator.go
@@ -1,6 +1,5 @@
-// Copyright 2020, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2020 Shulhan <ms@kilabit.info>
package html
diff --git a/lib/http/callback.go b/lib/http/callback.go
index 24e7ef93..34ad0f67 100644
--- a/lib/http/callback.go
+++ b/lib/http/callback.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package http
diff --git a/lib/http/callback_error_handler.go b/lib/http/callback_error_handler.go
index 7a1c075d..d51c47c8 100644
--- a/lib/http/callback_error_handler.go
+++ b/lib/http/callback_error_handler.go
@@ -1,6 +1,5 @@
-// Copyright 2020, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2020 Shulhan <ms@kilabit.info>
package http
diff --git a/lib/http/client_example_test.go b/lib/http/client_example_test.go
index 22b24285..2bfdaab8 100644
--- a/lib/http/client_example_test.go
+++ b/lib/http/client_example_test.go
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2024 M. Shulhan <ms@kilabit.info>
+
package http_test
import (
diff --git a/lib/http/client_options.go b/lib/http/client_options.go
index b3cd195e..fe8312df 100644
--- a/lib/http/client_options.go
+++ b/lib/http/client_options.go
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2022 M. Shulhan <ms@kilabit.info>
+
package http
import (
diff --git a/lib/http/client_request.go b/lib/http/client_request.go
index 48ffb52b..541fe73f 100644
--- a/lib/http/client_request.go
+++ b/lib/http/client_request.go
@@ -1,6 +1,5 @@
-// Copyright 2022, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2022 Shulhan <ms@kilabit.info>
package http
diff --git a/lib/http/client_response.go b/lib/http/client_response.go
index 0606ac25..9bce7289 100644
--- a/lib/http/client_response.go
+++ b/lib/http/client_response.go
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2024 M. Shulhan <ms@kilabit.info>
+
package http
import "net/http"
diff --git a/lib/http/client_test.go b/lib/http/client_test.go
index 0aed66b4..dce74951 100644
--- a/lib/http/client_test.go
+++ b/lib/http/client_test.go
@@ -1,6 +1,5 @@
-// Copyright 2022, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2022 Shulhan <ms@kilabit.info>
package http
diff --git a/lib/http/download_request.go b/lib/http/download_request.go
index 9776729f..3bdf79e7 100644
--- a/lib/http/download_request.go
+++ b/lib/http/download_request.go
@@ -1,6 +1,5 @@
-// Copyright 2022, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2022 Shulhan <ms@kilabit.info>
package http
diff --git a/lib/http/endpoint_example_test.go b/lib/http/endpoint_example_test.go
index 9b4d9dce..abaf4fdc 100644
--- a/lib/http/endpoint_example_test.go
+++ b/lib/http/endpoint_example_test.go
@@ -1,6 +1,5 @@
-// Copyright 2020, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2020 Shulhan <ms@kilabit.info>
package http
diff --git a/lib/http/endpoint_request.go b/lib/http/endpoint_request.go
index 668b57c5..aa2e2989 100644
--- a/lib/http/endpoint_request.go
+++ b/lib/http/endpoint_request.go
@@ -1,6 +1,5 @@
-// Copyright 2021, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2021 Shulhan <ms@kilabit.info>
package http
diff --git a/lib/http/endpoint_response_example_test.go b/lib/http/endpoint_response_example_test.go
index e797cef0..c847da66 100644
--- a/lib/http/endpoint_response_example_test.go
+++ b/lib/http/endpoint_response_example_test.go
@@ -1,6 +1,5 @@
-// Copyright 2021, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2021 Shulhan <ms@kilabit.info>
package http
diff --git a/lib/http/endpoint_response_test.go b/lib/http/endpoint_response_test.go
index 06fead46..962ebc1b 100644
--- a/lib/http/endpoint_response_test.go
+++ b/lib/http/endpoint_response_test.go
@@ -1,6 +1,5 @@
-// Copyright 2021, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2021 Shulhan <ms@kilabit.info>
package http
diff --git a/lib/http/evaluator.go b/lib/http/evaluator.go
index b48a6907..8a45c0e1 100644
--- a/lib/http/evaluator.go
+++ b/lib/http/evaluator.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package http
diff --git a/lib/http/form_example_test.go b/lib/http/form_example_test.go
index 50994fa4..8eaafc38 100644
--- a/lib/http/form_example_test.go
+++ b/lib/http/form_example_test.go
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2022 M. Shulhan <ms@kilabit.info>
+
package http
import (
diff --git a/lib/http/form_test.go b/lib/http/form_test.go
index 014dbf35..4bd95fae 100644
--- a/lib/http/form_test.go
+++ b/lib/http/form_test.go
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2022 M. Shulhan <ms@kilabit.info>
+
package http
import (
diff --git a/lib/http/fs_handler.go b/lib/http/fs_handler.go
index 7dfca198..00eb1dc6 100644
--- a/lib/http/fs_handler.go
+++ b/lib/http/fs_handler.go
@@ -1,6 +1,5 @@
-// Copyright 2022, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2022 Shulhan <ms@kilabit.info>
package http
@@ -18,7 +17,7 @@ import (
// This function return two values: the node `out` that is used to process the
// request and response; and the HTTP status code `statusCode` returned in
// response.
-//
+
// Non-zero status code indicates that the function already response
// to the request, and the server will return immediately.
//
diff --git a/lib/http/http.go b/lib/http/http.go
index 838e5106..0a3c22ba 100644
--- a/lib/http/http.go
+++ b/lib/http/http.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
// Package http implement custom HTTP server with memory file system and
// simplified routing handler.
diff --git a/lib/http/http_example_test.go b/lib/http/http_example_test.go
index 367d1c75..0f087186 100644
--- a/lib/http/http_example_test.go
+++ b/lib/http/http_example_test.go
@@ -1,6 +1,5 @@
-// Copyright 2021, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2021 Shulhan <ms@kilabit.info>
package http
diff --git a/lib/http/http_test.go b/lib/http/http_test.go
index fa0c9975..8d3cac6f 100644
--- a/lib/http/http_test.go
+++ b/lib/http/http_test.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package http
diff --git a/lib/http/multipart_form.go b/lib/http/multipart_form.go
index bd535cfe..758de8db 100644
--- a/lib/http/multipart_form.go
+++ b/lib/http/multipart_form.go
@@ -1,6 +1,5 @@
-// Copyright 2024, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2024 Shulhan <ms@kilabit.info>
package http
diff --git a/lib/http/multipart_form_test.go b/lib/http/multipart_form_test.go
index c76ff0e5..e98b8ef2 100644
--- a/lib/http/multipart_form_test.go
+++ b/lib/http/multipart_form_test.go
@@ -1,6 +1,5 @@
-// Copyright 2024, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2024 Shulhan <ms@kilabit.info>
package http
diff --git a/lib/http/range.go b/lib/http/range.go
index 2a7d3b54..5a5c0b0d 100644
--- a/lib/http/range.go
+++ b/lib/http/range.go
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2023 M. Shulhan <ms@kilabit.info>
+
package http
import (
diff --git a/lib/http/range_example_test.go b/lib/http/range_example_test.go
index 4a474c22..0f53b9b7 100644
--- a/lib/http/range_example_test.go
+++ b/lib/http/range_example_test.go
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2023 M. Shulhan <ms@kilabit.info>
+
package http_test
import (
diff --git a/lib/http/range_position.go b/lib/http/range_position.go
index 4f9624f0..a65773a8 100644
--- a/lib/http/range_position.go
+++ b/lib/http/range_position.go
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2023 M. Shulhan <ms@kilabit.info>
+
package http
import (
diff --git a/lib/http/range_position_example_test.go b/lib/http/range_position_example_test.go
index 8d8177c3..eded0e4b 100644
--- a/lib/http/range_position_example_test.go
+++ b/lib/http/range_position_example_test.go
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2023 M. Shulhan <ms@kilabit.info>
+
package http_test
import (
diff --git a/lib/http/range_position_test.go b/lib/http/range_position_test.go
index a4bc8429..8fc2afd4 100644
--- a/lib/http/range_position_test.go
+++ b/lib/http/range_position_test.go
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2023 M. Shulhan <ms@kilabit.info>
+
package http
import (
diff --git a/lib/http/range_test.go b/lib/http/range_test.go
index 5d3db3b9..1c43f7ec 100644
--- a/lib/http/range_test.go
+++ b/lib/http/range_test.go
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2023 M. Shulhan <ms@kilabit.info>
+
package http
import (
diff --git a/lib/http/request_method.go b/lib/http/request_method.go
index af0ade82..3606b551 100644
--- a/lib/http/request_method.go
+++ b/lib/http/request_method.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package http
diff --git a/lib/http/request_type.go b/lib/http/request_type.go
index 2a79b6df..b86adbc4 100644
--- a/lib/http/request_type.go
+++ b/lib/http/request_type.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package http
diff --git a/lib/http/request_type_test.go b/lib/http/request_type_test.go
index 0bb05f99..6b7711ce 100644
--- a/lib/http/request_type_test.go
+++ b/lib/http/request_type_test.go
@@ -1,6 +1,5 @@
-// Copyright 2021, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2021 Shulhan <ms@kilabit.info>
package http
diff --git a/lib/http/response.go b/lib/http/response.go
index 9525799d..6c3c3efb 100644
--- a/lib/http/response.go
+++ b/lib/http/response.go
@@ -1,6 +1,5 @@
-// Copyright 2019, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 Shulhan <ms@kilabit.info>
package http
diff --git a/lib/http/response_type_test.go b/lib/http/response_type_test.go
index efbc2114..1afb48d8 100644
--- a/lib/http/response_type_test.go
+++ b/lib/http/response_type_test.go
@@ -1,6 +1,5 @@
-// Copyright 2021, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2021 Shulhan <ms@kilabit.info>
package http
diff --git a/lib/http/route.go b/lib/http/route.go
index 5ba2f5b1..f2d462df 100644
--- a/lib/http/route.go
+++ b/lib/http/route.go
@@ -1,6 +1,5 @@
-// Copyright 2019, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 Shulhan <ms@kilabit.info>
package http
diff --git a/lib/http/server_benchmark_test.go b/lib/http/server_benchmark_test.go
index b9161d41..9959d2c7 100644
--- a/lib/http/server_benchmark_test.go
+++ b/lib/http/server_benchmark_test.go
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2024 M. Shulhan <ms@kilabit.info>
+
package http
import (
diff --git a/lib/http/server_options.go b/lib/http/server_options.go
index 5ff15fb6..9ccb3e65 100644
--- a/lib/http/server_options.go
+++ b/lib/http/server_options.go
@@ -1,6 +1,5 @@
-// Copyright 2019, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 Shulhan <ms@kilabit.info>
package http
diff --git a/lib/http/sse_conn.go b/lib/http/sse_conn.go
index bb3e4f94..055a5793 100644
--- a/lib/http/sse_conn.go
+++ b/lib/http/sse_conn.go
@@ -1,6 +1,5 @@
-// Copyright 2023, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2023 Shulhan <ms@kilabit.info>
package http
diff --git a/lib/http/sse_endpoint.go b/lib/http/sse_endpoint.go
index c1bef50c..fa3c6c3d 100644
--- a/lib/http/sse_endpoint.go
+++ b/lib/http/sse_endpoint.go
@@ -1,6 +1,5 @@
-// Copyright 2023, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2023 Shulhan <ms@kilabit.info>
package http
diff --git a/lib/http/sse_endpoint_test.go b/lib/http/sse_endpoint_test.go
index ebc2036a..3a59ea27 100644
--- a/lib/http/sse_endpoint_test.go
+++ b/lib/http/sse_endpoint_test.go
@@ -1,6 +1,5 @@
-// Copyright 2023, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2023 Shulhan <ms@kilabit.info>
package http
diff --git a/lib/http/sseclient/event.go b/lib/http/sseclient/event.go
index b4ceeba2..a7aa908c 100644
--- a/lib/http/sseclient/event.go
+++ b/lib/http/sseclient/event.go
@@ -1,6 +1,5 @@
-// Copyright 2023, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2023 Shulhan <ms@kilabit.info>
package sseclient
diff --git a/lib/http/sseclient/sseclient_test.go b/lib/http/sseclient/sseclient_test.go
index 116ddbb5..43e89f62 100644
--- a/lib/http/sseclient/sseclient_test.go
+++ b/lib/http/sseclient/sseclient_test.go
@@ -1,6 +1,5 @@
-// Copyright 2023, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2023 Shulhan <ms@kilabit.info>
package sseclient
diff --git a/lib/http/testdata/GenerateFormData_test.txt b/lib/http/testdata/GenerateFormData_test.txt
index b209e07f..c43f35dd 100644
--- a/lib/http/testdata/GenerateFormData_test.txt
+++ b/lib/http/testdata/GenerateFormData_test.txt
@@ -1,3 +1,5 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2024 M. Shulhan <ms@kilabit.info>
>>> file0
Content of file0.
diff --git a/lib/http/testdata/Server_HandleFS_test.txt b/lib/http/testdata/Server_HandleFS_test.txt
index 23dd32c9..1089121a 100644
--- a/lib/http/testdata/Server_HandleFS_test.txt
+++ b/lib/http/testdata/Server_HandleFS_test.txt
@@ -1,3 +1,5 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2025 M. Shulhan <ms@kilabit.info>
<<< TestServer_HandleFS/OnEmptyRoot
HTTP/1.1 200 OK
diff --git a/lib/http/testdata/auth/index.html.license b/lib/http/testdata/auth/index.html.license
new file mode 100644
index 00000000..e96cbd26
--- /dev/null
+++ b/lib/http/testdata/auth/index.html.license
@@ -0,0 +1,2 @@
+SPDX-License-Identifier: BSD-3-Clause
+SPDX-FileCopyrightText: 2022 M. Shulhan <ms@kilabit.info>
diff --git a/lib/http/testdata/auth/sub/index.html.license b/lib/http/testdata/auth/sub/index.html.license
new file mode 100644
index 00000000..e96cbd26
--- /dev/null
+++ b/lib/http/testdata/auth/sub/index.html.license
@@ -0,0 +1,2 @@
+SPDX-License-Identifier: BSD-3-Clause
+SPDX-FileCopyrightText: 2022 M. Shulhan <ms@kilabit.info>
diff --git a/lib/http/testdata/handleDelete_test.txt b/lib/http/testdata/handleDelete_test.txt
index da170afc..0a5bd214 100644
--- a/lib/http/testdata/handleDelete_test.txt
+++ b/lib/http/testdata/handleDelete_test.txt
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2024 M. Shulhan <ms@kilabit.info>
+
Test data for handleDelete in Server.
<<< valid:request_body
diff --git a/lib/http/testdata/index.html.license b/lib/http/testdata/index.html.license
new file mode 100644
index 00000000..586206f5
--- /dev/null
+++ b/lib/http/testdata/index.html.license
@@ -0,0 +1,2 @@
+SPDX-License-Identifier: BSD-3-Clause
+SPDX-FileCopyrightText: 2018 M. Shulhan <ms@kilabit.info>
diff --git a/lib/http/testdata/index.js.license b/lib/http/testdata/index.js.license
new file mode 100644
index 00000000..586206f5
--- /dev/null
+++ b/lib/http/testdata/index.js.license
@@ -0,0 +1,2 @@
+SPDX-License-Identifier: BSD-3-Clause
+SPDX-FileCopyrightText: 2018 M. Shulhan <ms@kilabit.info>
diff --git a/lib/http/testdata/range/invalid_boundary_test.txt b/lib/http/testdata/range/invalid_boundary_test.txt
index 7fa7fdbb..a54ed1f9 100644
--- a/lib/http/testdata/range/invalid_boundary_test.txt
+++ b/lib/http/testdata/range/invalid_boundary_test.txt
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2023 M. Shulhan <ms@kilabit.info>
+
>>> body
--zxcv
Content-Range: bytes 0-6/50
diff --git a/lib/http/testdata/range/missing_last_boundary_test.txt b/lib/http/testdata/range/missing_last_boundary_test.txt
index 8388f517..32d2e0d3 100644
--- a/lib/http/testdata/range/missing_last_boundary_test.txt
+++ b/lib/http/testdata/range/missing_last_boundary_test.txt
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2023 M. Shulhan <ms@kilabit.info>
+
>>> body
--zxcv
Content-Range: bytes 10-15/50
diff --git a/lib/http/testdata/range/ok_test.txt b/lib/http/testdata/range/ok_test.txt
index 3e1f22d9..1c4ed804 100644
--- a/lib/http/testdata/range/ok_test.txt
+++ b/lib/http/testdata/range/ok_test.txt
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2023 M. Shulhan <ms@kilabit.info>
+
>>> body
--zxcv
Content-Range: bytes 10-15/50
diff --git a/lib/http/testdata/server/head_range_test.txt b/lib/http/testdata/server/head_range_test.txt
index 5376d7d1..f54314cc 100644
--- a/lib/http/testdata/server/head_range_test.txt
+++ b/lib/http/testdata/server/head_range_test.txt
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2023 M. Shulhan <ms@kilabit.info>
+
<<< http_headers
HTTP/1.1 200 OK
Accept-Ranges: bytes
diff --git a/lib/http/testdata/server/range/empty_test.txt b/lib/http/testdata/server/range/empty_test.txt
index 620f7a10..f86fbfed 100644
--- a/lib/http/testdata/server/range/empty_test.txt
+++ b/lib/http/testdata/server/range/empty_test.txt
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2023 M. Shulhan <ms@kilabit.info>
+
>>> header_range
bytes=
diff --git a/lib/http/testdata/server/range/fail_416_test.txt b/lib/http/testdata/server/range/fail_416_test.txt
index bac7bc87..64ef4e0b 100644
--- a/lib/http/testdata/server/range/fail_416_test.txt
+++ b/lib/http/testdata/server/range/fail_416_test.txt
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2023 M. Shulhan <ms@kilabit.info>
+
>>> header_range
bytes=50-
diff --git a/lib/http/testdata/server/range/fail_unit_test.txt b/lib/http/testdata/server/range/fail_unit_test.txt
index 7ef5abe8..2843bfa8 100644
--- a/lib/http/testdata/server/range/fail_unit_test.txt
+++ b/lib/http/testdata/server/range/fail_unit_test.txt
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2023 M. Shulhan <ms@kilabit.info>
+
>>> header_range
myunit=10-15
diff --git a/lib/http/testdata/server/range/multipart_test.txt b/lib/http/testdata/server/range/multipart_test.txt
index bb90ca95..8be27dd6 100644
--- a/lib/http/testdata/server/range/multipart_test.txt
+++ b/lib/http/testdata/server/range/multipart_test.txt
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2023 M. Shulhan <ms@kilabit.info>
+
>>> header_range
bytes=0-5,10-15,-10
diff --git a/lib/http/testdata/server/range/single_test.txt b/lib/http/testdata/server/range/single_test.txt
index 4f896957..ba483341 100644
--- a/lib/http/testdata/server/range/single_test.txt
+++ b/lib/http/testdata/server/range/single_test.txt
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2023 M. Shulhan <ms@kilabit.info>
+
>>> header_range
bytes=10-15
diff --git a/lib/http/testdata/server/range_big_test.txt b/lib/http/testdata/server/range_big_test.txt
index 8d47b707..a9b8dc22 100644
--- a/lib/http/testdata/server/range_big_test.txt
+++ b/lib/http/testdata/server/range_big_test.txt
@@ -1,3 +1,5 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2024 M. Shulhan <ms@kilabit.info>
<<< HEAD /big
HTTP/1.1 200 OK
diff --git a/lib/ini/BENCHMARK.adoc b/lib/ini/BENCHMARK.adoc
index f1cf88f7..ccded564 100644
--- a/lib/ini/BENCHMARK.adoc
+++ b/lib/ini/BENCHMARK.adoc
@@ -1,6 +1,6 @@
-// Copyright 2022, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2022 Shulhan <ms@kilabit.info>
+
= Benchmark result history
Each of the benchmark result ordered in descending, which means the latest
diff --git a/lib/ini/benchmark_test.go b/lib/ini/benchmark_test.go
index b6f2dcf2..57e0476f 100644
--- a/lib/ini/benchmark_test.go
+++ b/lib/ini/benchmark_test.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package ini
diff --git a/lib/ini/common.go b/lib/ini/common.go
index 0feab91b..32bde50b 100644
--- a/lib/ini/common.go
+++ b/lib/ini/common.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package ini
diff --git a/lib/ini/common_example_test.go b/lib/ini/common_example_test.go
index 3ac59457..02129241 100644
--- a/lib/ini/common_example_test.go
+++ b/lib/ini/common_example_test.go
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2021 M. Shulhan <ms@kilabit.info>
+
package ini
import "fmt"
diff --git a/lib/ini/doc.go b/lib/ini/doc.go
index 3c4bc4dd..931acc32 100644
--- a/lib/ini/doc.go
+++ b/lib/ini/doc.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
/*
Package ini implement reading and writing INI text format as defined by
diff --git a/lib/ini/ini_example_test.go b/lib/ini/ini_example_test.go
index f625f552..7c80fd38 100644
--- a/lib/ini/ini_example_test.go
+++ b/lib/ini/ini_example_test.go
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 M. Shulhan <ms@kilabit.info>
+
package ini
import (
diff --git a/lib/ini/ini_unmarshal.go b/lib/ini/ini_unmarshal.go
index c6e3a175..aed1548e 100644
--- a/lib/ini/ini_unmarshal.go
+++ b/lib/ini/ini_unmarshal.go
@@ -1,6 +1,5 @@
-// Copyright 2021, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2021 Shulhan <ms@kilabit.info>
package ini
diff --git a/lib/ini/linemode.go b/lib/ini/linemode.go
index 3f98477d..cef37a49 100644
--- a/lib/ini/linemode.go
+++ b/lib/ini/linemode.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package ini
diff --git a/lib/ini/section_test.go b/lib/ini/section_test.go
index d1b04e6d..25ae6c07 100644
--- a/lib/ini/section_test.go
+++ b/lib/ini/section_test.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package ini
diff --git a/lib/ini/struct_field.go b/lib/ini/struct_field.go
index 389c6f8f..0b4a1222 100644
--- a/lib/ini/struct_field.go
+++ b/lib/ini/struct_field.go
@@ -1,6 +1,5 @@
-// Copyright 2021, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2021 Shulhan <ms@kilabit.info>
package ini
diff --git a/lib/ini/testdata/get_complex_test.txt b/lib/ini/testdata/get_complex_test.txt
index aeb348eb..2800b43d 100644
--- a/lib/ini/testdata/get_complex_test.txt
+++ b/lib/ini/testdata/get_complex_test.txt
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 M. Shulhan <ms@kilabit.info>
+
kind: get
Complex ini content.
diff --git a/lib/ini/testdata/get_test.txt b/lib/ini/testdata/get_test.txt
index f8613473..86400b14 100644
--- a/lib/ini/testdata/get_test.txt
+++ b/lib/ini/testdata/get_test.txt
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2022 M. Shulhan <ms@kilabit.info>
+
kind: get
>>>
diff --git a/lib/ini/testdata/struct/embedded_test.txt b/lib/ini/testdata/struct/embedded_test.txt
index 10f3c9a4..6d7dd8a0 100644
--- a/lib/ini/testdata/struct/embedded_test.txt
+++ b/lib/ini/testdata/struct/embedded_test.txt
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2022 M. Shulhan <ms@kilabit.info>
+
kind: embedded
Test unmarshalling into embedded struct.
diff --git a/lib/ini/testdata/struct/map_test.txt b/lib/ini/testdata/struct/map_test.txt
index 9d170d61..fd3d58aa 100644
--- a/lib/ini/testdata/struct/map_test.txt
+++ b/lib/ini/testdata/struct/map_test.txt
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2022 M. Shulhan <ms@kilabit.info>
+
kind: map
Make sure that variables loaded into a map written alphabetical orders by keys
diff --git a/lib/ini/testdata/struct/slice_of_pointer_test.txt b/lib/ini/testdata/struct/slice_of_pointer_test.txt
index 5e0c0d26..01150848 100644
--- a/lib/ini/testdata/struct/slice_of_pointer_test.txt
+++ b/lib/ini/testdata/struct/slice_of_pointer_test.txt
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2022 M. Shulhan <ms@kilabit.info>
+
kind: struct
Test Unmarshal into slice of pointer.
diff --git a/lib/ini/testdata/struct/slice_of_primitive_test.txt b/lib/ini/testdata/struct/slice_of_primitive_test.txt
index c44c9dcf..42acb405 100644
--- a/lib/ini/testdata/struct/slice_of_primitive_test.txt
+++ b/lib/ini/testdata/struct/slice_of_primitive_test.txt
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2022 M. Shulhan <ms@kilabit.info>
+
kind: struct
Test Unmarshal into slice of string, int, bool, time.Duration, and time.Time.
diff --git a/lib/ini/testdata/struct/slice_of_struct_test.txt b/lib/ini/testdata/struct/slice_of_struct_test.txt
index 47e69595..fbe5bd22 100644
--- a/lib/ini/testdata/struct/slice_of_struct_test.txt
+++ b/lib/ini/testdata/struct/slice_of_struct_test.txt
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2022 M. Shulhan <ms@kilabit.info>
+
kind: struct
Test unmarshaling into slice of struct.
diff --git a/lib/ini/testdata/struct/struct_test.txt b/lib/ini/testdata/struct/struct_test.txt
index 195a5b5a..e19ace1e 100644
--- a/lib/ini/testdata/struct/struct_test.txt
+++ b/lib/ini/testdata/struct/struct_test.txt
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2022 M. Shulhan <ms@kilabit.info>
+
kind: struct
Test Unmarshal-ing with some primitive types.
diff --git a/lib/ini/variable.go b/lib/ini/variable.go
index 9e496d05..c2fb725a 100644
--- a/lib/ini/variable.go
+++ b/lib/ini/variable.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package ini
diff --git a/lib/ini/variable_test.go b/lib/ini/variable_test.go
index 7ebf81ba..1ba5073d 100644
--- a/lib/ini/variable_test.go
+++ b/lib/ini/variable_test.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package ini
diff --git a/lib/math/big/big.go b/lib/math/big/big.go
index 411a8f61..71608345 100644
--- a/lib/math/big/big.go
+++ b/lib/math/big/big.go
@@ -1,6 +1,5 @@
-// Copyright 2020, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2020 Shulhan <ms@kilabit.info>
// Package big extends the capabilities of standard "math/big" package by
// adding custom global precision to Float and Rat; and global rounding mode,
diff --git a/lib/math/big/rat_test.go b/lib/math/big/rat_test.go
index 4b87e157..c74fa610 100644
--- a/lib/math/big/rat_test.go
+++ b/lib/math/big/rat_test.go
@@ -1,6 +1,5 @@
-// Copyright 2020, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2020 Shulhan <ms@kilabit.info>
package big
diff --git a/lib/math/math.go b/lib/math/math.go
index 0eb904d3..3b7597ff 100644
--- a/lib/math/math.go
+++ b/lib/math/math.go
@@ -1,6 +1,5 @@
-// Copyright 2015 Mhd Sulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2015 Mhd Sulhan <ms@kilabit.info>
// Package math provide generic functions working with math.
package math
diff --git a/lib/math/math_test.go b/lib/math/math_test.go
index ae7bf563..89019798 100644
--- a/lib/math/math_test.go
+++ b/lib/math/math_test.go
@@ -1,6 +1,5 @@
-// Copyright 2015 Mhd Sulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2015 Mhd Sulhan <ms@kilabit.info>
package math
diff --git a/lib/memfs/.gitignore b/lib/memfs/.gitignore
index d1708448..bc741c8c 100644
--- a/lib/memfs/.gitignore
+++ b/lib/memfs/.gitignore
@@ -1,2 +1,4 @@
+# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-FileCopyrightText: 2023 M. Shulhan <ms@kilabit.info>
/testdata/symlinkSource
/testdata/dirwatcher/withSymlink/symlinkDest
diff --git a/lib/memfs/embed.go b/lib/memfs/embed.go
index 0938c951..642e50db 100644
--- a/lib/memfs/embed.go
+++ b/lib/memfs/embed.go
@@ -1,6 +1,5 @@
-// Copyright 2019, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 Shulhan <ms@kilabit.info>
package memfs
diff --git a/lib/memfs/embed_options.go b/lib/memfs/embed_options.go
index 841c58f8..77d30ba0 100644
--- a/lib/memfs/embed_options.go
+++ b/lib/memfs/embed_options.go
@@ -1,6 +1,5 @@
-// Copyright 2021, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2021 Shulhan <ms@kilabit.info>
package memfs
diff --git a/lib/memfs/embed_test.go b/lib/memfs/embed_test.go
index 4c414c9d..85eac48d 100644
--- a/lib/memfs/embed_test.go
+++ b/lib/memfs/embed_test.go
@@ -15,6 +15,10 @@ func TestMemFS_GoEmbed_WithoutModTime(t *testing.T) {
".*/node_save$",
},
Embed: EmbedOptions{
+ CommentHeader: `// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 M. Shulhan <ms@kilabit.info>
+
+`,
PackageName: "embed",
GoFileName: "./internal/test/embed_disable_modtime/embed_test.go",
WithoutModTime: true,
diff --git a/lib/memfs/internal/test/embed_disable_modtime/embed_test.go b/lib/memfs/internal/test/embed_disable_modtime/embed_test.go
index e4ec47ba..9831da41 100644
--- a/lib/memfs/internal/test/embed_disable_modtime/embed_test.go
+++ b/lib/memfs/internal/test/embed_disable_modtime/embed_test.go
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 M. Shulhan <ms@kilabit.info>
+
// Code generated by git.sr.ht/~shulhan/pakakeh.go/lib/memfs DO NOT EDIT.
package embed
@@ -306,7 +309,10 @@ func init() {
`.*/node_save$`,
},
Embed: memfs.EmbedOptions{
- CommentHeader: ``,
+ CommentHeader: `// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 M. Shulhan <ms@kilabit.info>
+
+`,
PackageName: "embed",
VarName: "memFS",
GoFileName: "./internal/test/embed_disable_modtime/embed_test.go",
diff --git a/lib/memfs/internal/test/embed_disable_modtime/memfs_embed_test.go b/lib/memfs/internal/test/embed_disable_modtime/memfs_embed_test.go
index 738236ee..2bbdc938 100644
--- a/lib/memfs/internal/test/embed_disable_modtime/memfs_embed_test.go
+++ b/lib/memfs/internal/test/embed_disable_modtime/memfs_embed_test.go
@@ -1,6 +1,5 @@
-// Copyright 2019, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 Shulhan <ms@kilabit.info>
package embed
diff --git a/lib/memfs/memfs_test.go b/lib/memfs/memfs_test.go
index fb97ae1b..86d2cc26 100644
--- a/lib/memfs/memfs_test.go
+++ b/lib/memfs/memfs_test.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package memfs
diff --git a/lib/memfs/options.go b/lib/memfs/options.go
index 3f304f0c..6b65bf7f 100644
--- a/lib/memfs/options.go
+++ b/lib/memfs/options.go
@@ -1,6 +1,5 @@
-// Copyright 2021, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2021 Shulhan <ms@kilabit.info>
package memfs
diff --git a/lib/memfs/options_test.go b/lib/memfs/options_test.go
index 6dcb14a7..b0a26a30 100644
--- a/lib/memfs/options_test.go
+++ b/lib/memfs/options_test.go
@@ -1,6 +1,5 @@
-// Copyright 2024, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2024 Shulhan <ms@kilabit.info>
package memfs
diff --git a/lib/memfs/pathnode.go b/lib/memfs/pathnode.go
index d6b436a7..6571442b 100644
--- a/lib/memfs/pathnode.go
+++ b/lib/memfs/pathnode.go
@@ -1,6 +1,5 @@
-// Copyright 2019, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 Shulhan <ms@kilabit.info>
package memfs
diff --git a/lib/memfs/search_result.go b/lib/memfs/search_result.go
index fcd22f5e..b96e3f58 100644
--- a/lib/memfs/search_result.go
+++ b/lib/memfs/search_result.go
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 M. Shulhan <ms@kilabit.info>
+
package memfs
// SearchResult contains the result of searching where the Path will be
diff --git a/lib/memfs/template.go b/lib/memfs/template.go
index c751ac73..9072928f 100644
--- a/lib/memfs/template.go
+++ b/lib/memfs/template.go
@@ -1,6 +1,5 @@
-// Copyright 2019, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 Shulhan <ms@kilabit.info>
package memfs
diff --git a/lib/mining/README.html b/lib/mining/README.html
deleted file mode 100644
index 76909fc1..00000000
--- a/lib/mining/README.html
+++ /dev/null
@@ -1,63 +0,0 @@
-<!DOCTYPE html>
-<html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1" />
- <meta name="theme-color" content="#375EAB" />
-
- <title></title>
- </head>
- <body>
- <div class="topbar">
- <div class="container">
- <div class="top-heading">
- <a href="/">github.com/shuLhan/share</a>
- </div>
- <div class="menu">
- <a href="https://godoc.org/github.com/shuLhan/share">GoDoc</a>
- </div>
- <div class="menu">
- <a href="/CHANGELOG.html">Changelog</a>
- </div>
- </div>
- </div>
-
- <div class="page">
- <div class="container">
- <h1></h1>
- <p><a href="https://godoc.org/github.com/shuLhan/share/lib/mining"><img src="https://godoc.org/github.com/shuLhan/share/lib/mining?status.svg" alt="GoDoc"></a>
-<a href="https://goreportcard.com/report/github.com/shuLhan/share/lib/mining"><img src="https://goreportcard.com/badge/github.com/shuLhan/share/lib/mining" alt="Go Report Card"></a></p>
-<h1>go-mining</h1>
-<p>Go-mining is a small library for data mining.</p>
-<p>The library is written in <a href="golang/go">Go language</a>.</p>
-<h2>Features</h2>
-<h3>Classifiers</h3>
-<ul>
-<li>CART</li>
-<li>Random Forest</li>
-<li>Cascaded Random Forest</li>
-<li>K-Nearest Neighbourhood</li>
-</ul>
-<h3>Resampling</h3>
-<ul>
-<li>SMOTE</li>
-<li>LN-SMOTE (Local Neigbourhood SMOTE)</li>
-</ul>
-<h3>Miscellaneous</h3>
-<ul>
-<li>Gini index</li>
-</ul>
-
- </div>
-
- </div>
-
-
- <div class="footer">
- Copyright 2019, Shulhan &lt;ms@kilabit.info&gt;. All rights reserved.
- <br />
- Use of this source code is governed by a BSD-style license that can be
- found in the <a href="/LICENSE">LICENSE</a> file.
- </div>
- </body>
-</html>
diff --git a/lib/mining/README.md b/lib/mining/README.md
index 9ec1570c..1d6b1a3b 100644
--- a/lib/mining/README.md
+++ b/lib/mining/README.md
@@ -1,3 +1,6 @@
+<!-- SPDX-License-Identifier: BSD-3-Clause -->
+<!-- SPDX-FileCopyrightText: 2018 M. Shulhan <ms@kilabit.info> -->
+
[![GoDoc](https://godoc.org/git.sr.ht/~shulhan/pakakeh.go/lib/mining?status.svg)](https://godoc.org/git.sr.ht/~shulhan/pakakeh.go/lib/mining)
[![Go Report Card](https://goreportcard.com/badge/git.sr.ht/~shulhan/pakakeh.go/lib/mining)](https://goreportcard.com/report/git.sr.ht/~shulhan/pakakeh.go/lib/mining)
diff --git a/lib/mining/classifier/cart/cart_test.go b/lib/mining/classifier/cart/cart_test.go
index db59138b..ffafcf00 100644
--- a/lib/mining/classifier/cart/cart_test.go
+++ b/lib/mining/classifier/cart/cart_test.go
@@ -1,6 +1,5 @@
-// Copyright 2015 Mhd Sulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2015 Mhd Sulhan <ms@kilabit.info>
package cart
diff --git a/lib/mining/classifier/classifier.go b/lib/mining/classifier/classifier.go
index 5ab68e28..d6803f7b 100644
--- a/lib/mining/classifier/classifier.go
+++ b/lib/mining/classifier/classifier.go
@@ -1,6 +1,5 @@
-// Copyright 2016 Mhd Sulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2016 Mhd Sulhan <ms@kilabit.info>
// Package classifier provides machine learning classifier library,
// including CART, Random Forest, Cascaded Random Forest, and KNN.
diff --git a/lib/mining/classifier/cm_test.go b/lib/mining/classifier/cm_test.go
index 41289632..d6133683 100644
--- a/lib/mining/classifier/cm_test.go
+++ b/lib/mining/classifier/cm_test.go
@@ -1,6 +1,5 @@
-// Copyright 2016 Mhd Sulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2016 Mhd Sulhan <ms@kilabit.info>
package classifier
diff --git a/lib/mining/classifier/crf/crf_test.go b/lib/mining/classifier/crf/crf_test.go
index 12152e92..9f512307 100644
--- a/lib/mining/classifier/crf/crf_test.go
+++ b/lib/mining/classifier/crf/crf_test.go
@@ -1,6 +1,5 @@
-// Copyright 2015 Mhd Sulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2015 Mhd Sulhan <ms@kilabit.info>
package crf
diff --git a/lib/mining/classifier/rf/rf.go b/lib/mining/classifier/rf/rf.go
index 501080e4..3bb2a8fa 100644
--- a/lib/mining/classifier/rf/rf.go
+++ b/lib/mining/classifier/rf/rf.go
@@ -1,6 +1,5 @@
-// Copyright 2016 Mhd Sulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2016 Mhd Sulhan <ms@kilabit.info>
// Package rf implement ensemble of classifiers using random forest
// algorithm by Breiman and Cutler.
diff --git a/lib/mining/classifier/rf/rf_bench_test.go b/lib/mining/classifier/rf/rf_bench_test.go
index eddd721c..780798ec 100644
--- a/lib/mining/classifier/rf/rf_bench_test.go
+++ b/lib/mining/classifier/rf/rf_bench_test.go
@@ -1,6 +1,5 @@
-// Copyright 2016 Mhd Sulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2016 Mhd Sulhan <ms@kilabit.info>
package rf
diff --git a/lib/mining/classifier/rf/rf_test.go b/lib/mining/classifier/rf/rf_test.go
index de14e839..7dc8d0b3 100644
--- a/lib/mining/classifier/rf/rf_test.go
+++ b/lib/mining/classifier/rf/rf_test.go
@@ -1,6 +1,5 @@
-// Copyright 2016 Mhd Sulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2016 Mhd Sulhan <ms@kilabit.info>
package rf
diff --git a/lib/mining/classifier/runtime.go b/lib/mining/classifier/runtime.go
index 1d649788..c4747dff 100644
--- a/lib/mining/classifier/runtime.go
+++ b/lib/mining/classifier/runtime.go
@@ -1,6 +1,5 @@
-// Copyright 2016 Mhd Sulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2016 Mhd Sulhan <ms@kilabit.info>
package classifier
diff --git a/lib/mining/classifier/stat.go b/lib/mining/classifier/stat.go
index 483fc1b6..62e97e2f 100644
--- a/lib/mining/classifier/stat.go
+++ b/lib/mining/classifier/stat.go
@@ -1,6 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 M. Shulhan <ms@kilabit.info>
// Copyright 2015-2016 Mhd Sulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
package classifier
diff --git a/lib/mining/classifier/stats.go b/lib/mining/classifier/stats.go
index 7c4ef59c..e9c6a64c 100644
--- a/lib/mining/classifier/stats.go
+++ b/lib/mining/classifier/stats.go
@@ -1,6 +1,5 @@
-// Copyright 2016 Mhd Sulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2016 Mhd Sulhan <ms@kilabit.info>
package classifier
diff --git a/lib/mining/dict.go b/lib/mining/dict.go
index d24ce79e..76147420 100644
--- a/lib/mining/dict.go
+++ b/lib/mining/dict.go
@@ -1,6 +1,5 @@
-// Copyright 2018 Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package mining
diff --git a/lib/mining/gain/gini/gini_test.go b/lib/mining/gain/gini/gini_test.go
index 2132ecfc..417a2abe 100644
--- a/lib/mining/gain/gini/gini_test.go
+++ b/lib/mining/gain/gini/gini_test.go
@@ -1,6 +1,5 @@
-// Copyright 2015 Mhd Sulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2015 Mhd Sulhan <ms@kilabit.info>
package gini
diff --git a/lib/mining/gain/gini/ginifloat.go b/lib/mining/gain/gini/ginifloat.go
index e7cf0e07..10ec57ac 100644
--- a/lib/mining/gain/gini/ginifloat.go
+++ b/lib/mining/gain/gini/ginifloat.go
@@ -1,6 +1,5 @@
-// Copyright 2016 Mhd Sulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2016 Mhd Sulhan <ms@kilabit.info>
package gini
diff --git a/lib/mining/knn/knn.go b/lib/mining/knn/knn.go
index ac51e0f0..977e6dc6 100644
--- a/lib/mining/knn/knn.go
+++ b/lib/mining/knn/knn.go
@@ -1,6 +1,5 @@
-// Copyright 2015-2016 Mhd Sulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2015 M. Shulhan <ms@kilabit.info>
// Package knn implement the K Nearest Neighbor using Euclidean to compute the
// distance between samples.
diff --git a/lib/mining/knn/knn_test.go b/lib/mining/knn/knn_test.go
index 15cb4a41..0a8a3520 100644
--- a/lib/mining/knn/knn_test.go
+++ b/lib/mining/knn/knn_test.go
@@ -1,6 +1,5 @@
-// Copyright 2015 Mhd Sulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2015 Mhd Sulhan <ms@kilabit.info>
package knn
diff --git a/lib/mining/knn/neighbor.go b/lib/mining/knn/neighbor.go
index a89ab92f..5deb99c9 100644
--- a/lib/mining/knn/neighbor.go
+++ b/lib/mining/knn/neighbor.go
@@ -1,6 +1,5 @@
-// Copyright 2015 Mhd Sulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2015 Mhd Sulhan <ms@kilabit.info>
package knn
diff --git a/lib/mining/knn/neighbor_test.go b/lib/mining/knn/neighbor_test.go
index b5ad4e44..77ab9c1b 100644
--- a/lib/mining/knn/neighbor_test.go
+++ b/lib/mining/knn/neighbor_test.go
@@ -1,6 +1,5 @@
-// Copyright 2016 Mhd Sulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2016 Mhd Sulhan <ms@kilabit.info>
package knn
diff --git a/lib/mining/mining.go b/lib/mining/mining.go
index abcaf660..d60f2e9d 100644
--- a/lib/mining/mining.go
+++ b/lib/mining/mining.go
@@ -1,6 +1,5 @@
-// Copyright 2018 Mhd Sulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Mhd Sulhan <ms@kilabit.info>
// Package mining provides library for data mining and statistic related to
// machine learning.
diff --git a/lib/mining/resampling/interface.go b/lib/mining/resampling/interface.go
index b7a34f03..6d430fd3 100644
--- a/lib/mining/resampling/interface.go
+++ b/lib/mining/resampling/interface.go
@@ -1,6 +1,5 @@
-// Copyright 2016 Mhd Sulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2016 Mhd Sulhan <ms@kilabit.info>
// Package resampling provide common interface, constants, and methods for
// resampling modules.
diff --git a/lib/mining/resampling/lnsmote/lnsmote_test.go b/lib/mining/resampling/lnsmote/lnsmote_test.go
index e1c5c868..f6fbee13 100644
--- a/lib/mining/resampling/lnsmote/lnsmote_test.go
+++ b/lib/mining/resampling/lnsmote/lnsmote_test.go
@@ -1,6 +1,5 @@
-// Copyright 2016 Mhd Sulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2016 Mhd Sulhan <ms@kilabit.info>
package lnsmote
diff --git a/lib/mining/resampling/lnsmote/phoneme_lnsmote.dsv.license b/lib/mining/resampling/lnsmote/phoneme_lnsmote.dsv.license
new file mode 100644
index 00000000..586206f5
--- /dev/null
+++ b/lib/mining/resampling/lnsmote/phoneme_lnsmote.dsv.license
@@ -0,0 +1,2 @@
+SPDX-License-Identifier: BSD-3-Clause
+SPDX-FileCopyrightText: 2018 M. Shulhan <ms@kilabit.info>
diff --git a/lib/mining/resampling/smote/phoneme_smote.dsv.license b/lib/mining/resampling/smote/phoneme_smote.dsv.license
new file mode 100644
index 00000000..586206f5
--- /dev/null
+++ b/lib/mining/resampling/smote/phoneme_smote.dsv.license
@@ -0,0 +1,2 @@
+SPDX-License-Identifier: BSD-3-Clause
+SPDX-FileCopyrightText: 2018 M. Shulhan <ms@kilabit.info>
diff --git a/lib/mining/resampling/smote/smote_test.go b/lib/mining/resampling/smote/smote_test.go
index 7b0e113c..d2a4dbc4 100644
--- a/lib/mining/resampling/smote/smote_test.go
+++ b/lib/mining/resampling/smote/smote_test.go
@@ -1,6 +1,5 @@
-// Copyright 2015 Mhd Sulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2015 Mhd Sulhan <ms@kilabit.info>
package smote
diff --git a/lib/mining/tree/binary/binary.go b/lib/mining/tree/binary/binary.go
index 7fa0136e..c8801e5d 100644
--- a/lib/mining/tree/binary/binary.go
+++ b/lib/mining/tree/binary/binary.go
@@ -1,6 +1,5 @@
-// Copyright 2015 Mhd Sulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2015 Mhd Sulhan <ms@kilabit.info>
// Package binary contain implementation of binary tree.
package binary
diff --git a/lib/mining/tree/binary/binary_test.go b/lib/mining/tree/binary/binary_test.go
index 4f61deb0..e5b288f2 100644
--- a/lib/mining/tree/binary/binary_test.go
+++ b/lib/mining/tree/binary/binary_test.go
@@ -1,6 +1,5 @@
-// Copyright 2015 Mhd Sulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2015 Mhd Sulhan <ms@kilabit.info>
package binary
diff --git a/lib/mlog/benchmark_test.go b/lib/mlog/benchmark_test.go
index 25138d24..e5fb9fbb 100644
--- a/lib/mlog/benchmark_test.go
+++ b/lib/mlog/benchmark_test.go
@@ -1,6 +1,5 @@
-// Copyright 2022, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2022 Shulhan <ms@kilabit.info>
package mlog
diff --git a/lib/mlog/example_test.go b/lib/mlog/example_test.go
index 4509fedc..41b44335 100644
--- a/lib/mlog/example_test.go
+++ b/lib/mlog/example_test.go
@@ -1,6 +1,5 @@
-// Copyright 2021, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2021 Shulhan <ms@kilabit.info>
package mlog_test
diff --git a/lib/mlog/named_writer.go b/lib/mlog/named_writer.go
index 6f71a9f5..5c0dc602 100644
--- a/lib/mlog/named_writer.go
+++ b/lib/mlog/named_writer.go
@@ -1,6 +1,5 @@
-// Copyright 2021, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2021 Shulhan <ms@kilabit.info>
package mlog
diff --git a/lib/net/is.go b/lib/net/is.go
index 44284afc..e83eaa63 100644
--- a/lib/net/is.go
+++ b/lib/net/is.go
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 M. Shulhan <ms@kilabit.info>
+
package net
import (
diff --git a/lib/net/is_test.go b/lib/net/is_test.go
index b6612e91..0ff6a6ae 100644
--- a/lib/net/is_test.go
+++ b/lib/net/is_test.go
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 M. Shulhan <ms@kilabit.info>
+
package net
import (
diff --git a/lib/net/net_test.go b/lib/net/net_test.go
index fa452e29..6e1ff572 100644
--- a/lib/net/net_test.go
+++ b/lib/net/net_test.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package net
diff --git a/lib/net/parser.go b/lib/net/parser.go
index fc1bec0f..851dd54c 100644
--- a/lib/net/parser.go
+++ b/lib/net/parser.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package net
diff --git a/lib/net/parser_test.go b/lib/net/parser_test.go
index bddf171e..24b75496 100644
--- a/lib/net/parser_test.go
+++ b/lib/net/parser_test.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package net
diff --git a/lib/net/poll.go b/lib/net/poll.go
index cf7d1ba4..7ee9563a 100644
--- a/lib/net/poll.go
+++ b/lib/net/poll.go
@@ -1,6 +1,5 @@
-// Copyright 2019, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 Shulhan <ms@kilabit.info>
package net
diff --git a/lib/net/poll_event.go b/lib/net/poll_event.go
index f90045ff..e58f2d9a 100644
--- a/lib/net/poll_event.go
+++ b/lib/net/poll_event.go
@@ -1,6 +1,5 @@
-// Copyright 2023, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2023 Shulhan <ms@kilabit.info>
package net
diff --git a/lib/net/poll_event_bsd.go b/lib/net/poll_event_bsd.go
index 9bafb01d..ca6c876a 100644
--- a/lib/net/poll_event_bsd.go
+++ b/lib/net/poll_event_bsd.go
@@ -1,6 +1,5 @@
-// Copyright 2023, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2023 Shulhan <ms@kilabit.info>
//go:build darwin || dragonfly || freebsd || netbsd || openbsd
diff --git a/lib/net/poll_event_linux.go b/lib/net/poll_event_linux.go
index 69e8ef14..73a1e50f 100644
--- a/lib/net/poll_event_linux.go
+++ b/lib/net/poll_event_linux.go
@@ -1,6 +1,5 @@
-// Copyright 2023, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2023 Shulhan <ms@kilabit.info>
//go:build linux
diff --git a/lib/net/resolvconf.go b/lib/net/resolvconf.go
index 9555abb3..3acc2453 100644
--- a/lib/net/resolvconf.go
+++ b/lib/net/resolvconf.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package net
diff --git a/lib/net/resolvconf_example_test.go b/lib/net/resolvconf_example_test.go
index 9d81ea83..d88ae4dc 100644
--- a/lib/net/resolvconf_example_test.go
+++ b/lib/net/resolvconf_example_test.go
@@ -1,6 +1,5 @@
-// Copyright 2022, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2022 Shulhan <ms@kilabit.info>
package net_test
diff --git a/lib/net/resolvconf_test.go b/lib/net/resolvconf_test.go
index 4d0d3270..9d316cb5 100644
--- a/lib/net/resolvconf_test.go
+++ b/lib/net/resolvconf_test.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package net
diff --git a/lib/numbers/float64.go b/lib/numbers/float64.go
index ecc34c6a..255877ef 100644
--- a/lib/numbers/float64.go
+++ b/lib/numbers/float64.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package numbers
diff --git a/lib/numbers/float64_test.go b/lib/numbers/float64_test.go
index d89b48c5..a60aa6b8 100644
--- a/lib/numbers/float64_test.go
+++ b/lib/numbers/float64_test.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package numbers
diff --git a/lib/numbers/int.go b/lib/numbers/int.go
index d81b7bc0..e6fa450c 100644
--- a/lib/numbers/int.go
+++ b/lib/numbers/int.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package numbers
diff --git a/lib/numbers/int64.go b/lib/numbers/int64.go
index af2f8124..e95d715c 100644
--- a/lib/numbers/int64.go
+++ b/lib/numbers/int64.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package numbers
diff --git a/lib/numbers/int64_test.go b/lib/numbers/int64_test.go
index 218e4618..49ac8bff 100644
--- a/lib/numbers/int64_test.go
+++ b/lib/numbers/int64_test.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package numbers
diff --git a/lib/numbers/int_test.go b/lib/numbers/int_test.go
index 7b483ae5..0d37645e 100644
--- a/lib/numbers/int_test.go
+++ b/lib/numbers/int_test.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package numbers
diff --git a/lib/os/exec/exec.go b/lib/os/exec/exec.go
index b7c44c5c..5b1f2200 100644
--- a/lib/os/exec/exec.go
+++ b/lib/os/exec/exec.go
@@ -1,6 +1,5 @@
-// Copyright 2020, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2020 Shulhan <ms@kilabit.info>
// Package exec wrap the standar package "os/exec" to simplify calling Run
// with stdout and stderr.
diff --git a/lib/os/exec/exec_test.go b/lib/os/exec/exec_test.go
index 24cd001b..11b566ec 100644
--- a/lib/os/exec/exec_test.go
+++ b/lib/os/exec/exec_test.go
@@ -1,6 +1,5 @@
-// Copyright 2020, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2020 Shulhan <ms@kilabit.info>
package exec
diff --git a/lib/os/extract_test.go b/lib/os/extract_test.go
index 2f3533e2..625e406b 100644
--- a/lib/os/extract_test.go
+++ b/lib/os/extract_test.go
@@ -1,6 +1,5 @@
-// Copyright 2022, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2022 Shulhan <ms@kilabit.info>
package os
diff --git a/lib/os/os_unix_test.go b/lib/os/os_unix_test.go
index 7bf01065..19e71001 100644
--- a/lib/os/os_unix_test.go
+++ b/lib/os/os_unix_test.go
@@ -1,6 +1,5 @@
-// Copyright 2023, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2023 Shulhan <ms@kilabit.info>
package os
diff --git a/lib/paseto/example_local_mode_test.go b/lib/paseto/example_local_mode_test.go
index 5782037e..3046f8c6 100644
--- a/lib/paseto/example_local_mode_test.go
+++ b/lib/paseto/example_local_mode_test.go
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2020 M. Shulhan <ms@kilabit.info>
+
package paseto
import (
diff --git a/lib/paseto/json_token.go b/lib/paseto/json_token.go
index c8197b51..f5ab4979 100644
--- a/lib/paseto/json_token.go
+++ b/lib/paseto/json_token.go
@@ -1,6 +1,5 @@
-// Copyright 2020, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2020 Shulhan <ms@kilabit.info>
package paseto
diff --git a/lib/paseto/json_token_test.go b/lib/paseto/json_token_test.go
index db928be4..1d43e058 100644
--- a/lib/paseto/json_token_test.go
+++ b/lib/paseto/json_token_test.go
@@ -1,6 +1,5 @@
-// Copyright 2020, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2020 Shulhan <ms@kilabit.info>
package paseto
diff --git a/lib/paseto/key.go b/lib/paseto/key.go
index f6cb75cf..b5a2a083 100644
--- a/lib/paseto/key.go
+++ b/lib/paseto/key.go
@@ -1,6 +1,5 @@
-// Copyright 2020, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2020 Shulhan <ms@kilabit.info>
package paseto
diff --git a/lib/paseto/keys.go b/lib/paseto/keys.go
index cf805b0e..170efab0 100644
--- a/lib/paseto/keys.go
+++ b/lib/paseto/keys.go
@@ -1,6 +1,5 @@
-// Copyright 2020, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2020 Shulhan <ms@kilabit.info>
package paseto
diff --git a/lib/paseto/local_mode.go b/lib/paseto/local_mode.go
index 74d5b2e6..cfab3b3d 100644
--- a/lib/paseto/local_mode.go
+++ b/lib/paseto/local_mode.go
@@ -1,6 +1,5 @@
-// Copyright 2020, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2020 Shulhan <ms@kilabit.info>
package paseto
diff --git a/lib/paseto/paseto_test.go b/lib/paseto/paseto_test.go
index 76fc5bbc..5c267bc8 100644
--- a/lib/paseto/paseto_test.go
+++ b/lib/paseto/paseto_test.go
@@ -1,6 +1,5 @@
-// Copyright 2020, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2020 Shulhan <ms@kilabit.info>
package paseto
diff --git a/lib/paseto/public_mode_test.go b/lib/paseto/public_mode_test.go
index 74cee013..8b8e7c00 100644
--- a/lib/paseto/public_mode_test.go
+++ b/lib/paseto/public_mode_test.go
@@ -1,6 +1,5 @@
-// Copyright 2020, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2020 Shulhan <ms@kilabit.info>
package paseto
diff --git a/lib/paseto/public_token.go b/lib/paseto/public_token.go
index e3249db3..33f28d15 100644
--- a/lib/paseto/public_token.go
+++ b/lib/paseto/public_token.go
@@ -1,6 +1,5 @@
-// Copyright 2020, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2020 Shulhan <ms@kilabit.info>
package paseto
diff --git a/lib/path/path.go b/lib/path/path.go
index d1ec3edd..207a53ab 100644
--- a/lib/path/path.go
+++ b/lib/path/path.go
@@ -1,6 +1,5 @@
-// Copyright 2024, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2024 Shulhan <ms@kilabit.info>
// Package path implements utility routines for manipulating slash-separated
// paths.
diff --git a/lib/path/route.go b/lib/path/route.go
index 578e2b62..0ca4be2c 100644
--- a/lib/path/route.go
+++ b/lib/path/route.go
@@ -1,6 +1,5 @@
-// Copyright 2019, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 Shulhan <ms@kilabit.info>
package path
diff --git a/lib/path/route_example_test.go b/lib/path/route_example_test.go
index 3baa730f..435652d7 100644
--- a/lib/path/route_example_test.go
+++ b/lib/path/route_example_test.go
@@ -1,6 +1,5 @@
-// Copyright 2024, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2024 Shulhan <ms@kilabit.info>
package path_test
diff --git a/lib/path/route_node.go b/lib/path/route_node.go
index b89ab24e..79313a53 100644
--- a/lib/path/route_node.go
+++ b/lib/path/route_node.go
@@ -1,6 +1,5 @@
-// Copyright 2019, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 Shulhan <ms@kilabit.info>
package path
diff --git a/lib/path/route_test.go b/lib/path/route_test.go
index 9e1c5be7..474094bf 100644
--- a/lib/path/route_test.go
+++ b/lib/path/route_test.go
@@ -1,6 +1,5 @@
-// Copyright 2019, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 Shulhan <ms@kilabit.info>
package path
diff --git a/lib/play/testdata/.gitignore b/lib/play/testdata/.gitignore
index 917e3a48..50392e86 100644
--- a/lib/play/testdata/.gitignore
+++ b/lib/play/testdata/.gitignore
@@ -1 +1,3 @@
+# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-FileCopyrightText: 2024 M. Shulhan <ms@kilabit.info>
/test_test.go
diff --git a/lib/play/testdata/unsafe_run/cmd/forum/main.go b/lib/play/testdata/unsafe_run/cmd/forum/main.go
index c8fb90ef..1f655b43 100644
--- a/lib/play/testdata/unsafe_run/cmd/forum/main.go
+++ b/lib/play/testdata/unsafe_run/cmd/forum/main.go
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2024 M. Shulhan <ms@kilabit.info>
+
package main
import "forum.local/forum"
diff --git a/lib/play/testdata/unsafe_run/forum/forum.go b/lib/play/testdata/unsafe_run/forum/forum.go
index 4401b9da..8b8ea272 100644
--- a/lib/play/testdata/unsafe_run/forum/forum.go
+++ b/lib/play/testdata/unsafe_run/forum/forum.go
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2024 M. Shulhan <ms@kilabit.info>
+
package forum
import "fmt"
diff --git a/lib/play/testdata/unsafe_run/go.mod b/lib/play/testdata/unsafe_run/go.mod
index f0a7067f..9c311c96 100644
--- a/lib/play/testdata/unsafe_run/go.mod
+++ b/lib/play/testdata/unsafe_run/go.mod
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2024 M. Shulhan <ms@kilabit.info>
+
module forum.local
go 1.23.2
diff --git a/lib/runes/runes_example_test.go b/lib/runes/runes_example_test.go
index 909b7b91..5f6da900 100644
--- a/lib/runes/runes_example_test.go
+++ b/lib/runes/runes_example_test.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package runes
diff --git a/lib/runes/runes_test.go b/lib/runes/runes_test.go
index 0309ff3f..4093cfa7 100644
--- a/lib/runes/runes_test.go
+++ b/lib/runes/runes_test.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package runes
diff --git a/lib/smtp/client_options.go b/lib/smtp/client_options.go
index 8adc9b6e..36b173e8 100644
--- a/lib/smtp/client_options.go
+++ b/lib/smtp/client_options.go
@@ -1,6 +1,5 @@
-// Copyright 2022, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2022 Shulhan <ms@kilabit.info>
package smtp
diff --git a/lib/smtp/client_test.go b/lib/smtp/client_test.go
index 764a2c04..cf21f757 100644
--- a/lib/smtp/client_test.go
+++ b/lib/smtp/client_test.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package smtp
diff --git a/lib/smtp/command.go b/lib/smtp/command.go
index 0cf958b3..b902c19a 100644
--- a/lib/smtp/command.go
+++ b/lib/smtp/command.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package smtp
diff --git a/lib/smtp/command_test.go b/lib/smtp/command_test.go
index 97a74119..ee5a7761 100644
--- a/lib/smtp/command_test.go
+++ b/lib/smtp/command_test.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package smtp
diff --git a/lib/smtp/dkimoptions.go b/lib/smtp/dkimoptions.go
index 90006b35..6e615b4e 100644
--- a/lib/smtp/dkimoptions.go
+++ b/lib/smtp/dkimoptions.go
@@ -1,6 +1,5 @@
-// Copyright 2019, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 Shulhan <ms@kilabit.info>
package smtp
diff --git a/lib/smtp/doc.go b/lib/smtp/doc.go
index af6c43d7..481faa05 100644
--- a/lib/smtp/doc.go
+++ b/lib/smtp/doc.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
// Package smtp provide a library for building SMTP server and client.
//
@@ -15,7 +14,7 @@
// authentication.
//
// # Server Environment
-//
+
// The server require one primary domain with one primary account called
// "postmaster". Domain can have two or more accounts. Domain can have
// their own DKIM certificate.
diff --git a/lib/smtp/domain.go b/lib/smtp/domain.go
index 0dd054f7..5364b5e2 100644
--- a/lib/smtp/domain.go
+++ b/lib/smtp/domain.go
@@ -1,6 +1,5 @@
-// Copyright 2019, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 Shulhan <ms@kilabit.info>
package smtp
diff --git a/lib/smtp/environment.go b/lib/smtp/environment.go
index f7b2bdd9..d92a8e82 100644
--- a/lib/smtp/environment.go
+++ b/lib/smtp/environment.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package smtp
diff --git a/lib/smtp/error.go b/lib/smtp/error.go
index 65264a73..f0d31c99 100644
--- a/lib/smtp/error.go
+++ b/lib/smtp/error.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package smtp
diff --git a/lib/smtp/extension.go b/lib/smtp/extension.go
index e6165c1b..594d5641 100644
--- a/lib/smtp/extension.go
+++ b/lib/smtp/extension.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package smtp
diff --git a/lib/smtp/extension_dsn.go b/lib/smtp/extension_dsn.go
index 092f44ef..384ec594 100644
--- a/lib/smtp/extension_dsn.go
+++ b/lib/smtp/extension_dsn.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package smtp
diff --git a/lib/smtp/handler.go b/lib/smtp/handler.go
index c132d197..de92b131 100644
--- a/lib/smtp/handler.go
+++ b/lib/smtp/handler.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package smtp
diff --git a/lib/smtp/localhandler.go b/lib/smtp/localhandler.go
index 2c74d6b9..51a9464f 100644
--- a/lib/smtp/localhandler.go
+++ b/lib/smtp/localhandler.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package smtp
diff --git a/lib/smtp/localstorage.go b/lib/smtp/localstorage.go
index 86a59ba3..c989acc8 100644
--- a/lib/smtp/localstorage.go
+++ b/lib/smtp/localstorage.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package smtp
diff --git a/lib/smtp/localstorage_test.go b/lib/smtp/localstorage_test.go
index fbb453e0..591ca407 100644
--- a/lib/smtp/localstorage_test.go
+++ b/lib/smtp/localstorage_test.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package smtp
diff --git a/lib/smtp/mail_tx.go b/lib/smtp/mail_tx.go
index 620e7b35..29884d79 100644
--- a/lib/smtp/mail_tx.go
+++ b/lib/smtp/mail_tx.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package smtp
diff --git a/lib/smtp/mail_tx_example_test.go b/lib/smtp/mail_tx_example_test.go
index 7e824b26..faa16d50 100644
--- a/lib/smtp/mail_tx_example_test.go
+++ b/lib/smtp/mail_tx_example_test.go
@@ -1,6 +1,5 @@
-// Copyright 2022, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2022 Shulhan <ms@kilabit.info>
package smtp_test
diff --git a/lib/smtp/mail_tx_test.go b/lib/smtp/mail_tx_test.go
index 58d85ec2..ddb4daac 100644
--- a/lib/smtp/mail_tx_test.go
+++ b/lib/smtp/mail_tx_test.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package smtp
diff --git a/lib/smtp/mailbox.go b/lib/smtp/mailbox.go
index 71b3923b..cc8ca8c7 100644
--- a/lib/smtp/mailbox.go
+++ b/lib/smtp/mailbox.go
@@ -1,6 +1,5 @@
-// Copyright 2019, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 Shulhan <ms@kilabit.info>
package smtp
diff --git a/lib/smtp/receiver.go b/lib/smtp/receiver.go
index 43d83735..e8d59054 100644
--- a/lib/smtp/receiver.go
+++ b/lib/smtp/receiver.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package smtp
diff --git a/lib/smtp/response.go b/lib/smtp/response.go
index 366907a6..39107aac 100644
--- a/lib/smtp/response.go
+++ b/lib/smtp/response.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package smtp
diff --git a/lib/smtp/response_test.go b/lib/smtp/response_test.go
index d0d6352a..f421d6c5 100644
--- a/lib/smtp/response_test.go
+++ b/lib/smtp/response_test.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package smtp
diff --git a/lib/smtp/sasl_mechanism.go b/lib/smtp/sasl_mechanism.go
index 06ef61f0..587b6e43 100644
--- a/lib/smtp/sasl_mechanism.go
+++ b/lib/smtp/sasl_mechanism.go
@@ -1,6 +1,5 @@
-// Copyright 2019, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 Shulhan <ms@kilabit.info>
package smtp
diff --git a/lib/smtp/server.go b/lib/smtp/server.go
index 42a76352..ea52753a 100644
--- a/lib/smtp/server.go
+++ b/lib/smtp/server.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package smtp
diff --git a/lib/smtp/serverinfo.go b/lib/smtp/serverinfo.go
index f36fd820..908bce73 100644
--- a/lib/smtp/serverinfo.go
+++ b/lib/smtp/serverinfo.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package smtp
diff --git a/lib/smtp/smtp_example_test.go b/lib/smtp/smtp_example_test.go
index c06ec144..f8a85cab 100644
--- a/lib/smtp/smtp_example_test.go
+++ b/lib/smtp/smtp_example_test.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package smtp_test
diff --git a/lib/smtp/smtp_test.go b/lib/smtp/smtp_test.go
index b36da4c7..d0ac24cf 100644
--- a/lib/smtp/smtp_test.go
+++ b/lib/smtp/smtp_test.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package smtp
diff --git a/lib/smtp/storage.go b/lib/smtp/storage.go
index d6065a8f..92d160fa 100644
--- a/lib/smtp/storage.go
+++ b/lib/smtp/storage.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package smtp
diff --git a/lib/smtp/testdata/client_live_test.txt b/lib/smtp/testdata/client_live_test.txt
index 87cc695f..ed782ff8 100644
--- a/lib/smtp/testdata/client_live_test.txt
+++ b/lib/smtp/testdata/client_live_test.txt
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2023 M. Shulhan <ms@kilabit.info>
+
>>> subject
Test SendEmail from lib/smtp
@@ -18,4 +21,3 @@ This is the message body in <code>HTML</code> format.
Best, <br/>
Yourself
</p>
-
diff --git a/lib/spf/directive.go b/lib/spf/directive.go
index 45a0c66a..628d895f 100644
--- a/lib/spf/directive.go
+++ b/lib/spf/directive.go
@@ -1,6 +1,5 @@
-// Copyright 2019, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 Shulhan <ms@kilabit.info>
package spf
diff --git a/lib/spf/macro_test.go b/lib/spf/macro_test.go
index 02d0decc..2efc5b41 100644
--- a/lib/spf/macro_test.go
+++ b/lib/spf/macro_test.go
@@ -1,6 +1,5 @@
-// Copyright 2019, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 Shulhan <ms@kilabit.info>
package spf
diff --git a/lib/spf/modifier.go b/lib/spf/modifier.go
index f709b227..c7eac174 100644
--- a/lib/spf/modifier.go
+++ b/lib/spf/modifier.go
@@ -1,6 +1,5 @@
-// Copyright 2019, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 Shulhan <ms@kilabit.info>
package spf
diff --git a/lib/spf/spf.go b/lib/spf/spf.go
index 7abc507e..30fbc2b4 100644
--- a/lib/spf/spf.go
+++ b/lib/spf/spf.go
@@ -1,6 +1,5 @@
-// Copyright 2019, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 Shulhan <ms@kilabit.info>
// Package spf implement Sender Policy Framework (SPF) per RFC 7208.
package spf
diff --git a/lib/sql/client.go b/lib/sql/client.go
index 53e8efc0..b553bde5 100644
--- a/lib/sql/client.go
+++ b/lib/sql/client.go
@@ -1,6 +1,5 @@
-// Copyright 2020, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2020 Shulhan <ms@kilabit.info>
package sql
diff --git a/lib/sql/client_options.go b/lib/sql/client_options.go
index beaeff66..89ed1817 100644
--- a/lib/sql/client_options.go
+++ b/lib/sql/client_options.go
@@ -1,6 +1,5 @@
-// Copyright 2020, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2020 Shulhan <ms@kilabit.info>
package sql
diff --git a/lib/sql/dml_kind.go b/lib/sql/dml_kind.go
index 6077cc4f..d461ba83 100644
--- a/lib/sql/dml_kind.go
+++ b/lib/sql/dml_kind.go
@@ -1,6 +1,5 @@
-// Copyright 2023, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2023 Shulhan <ms@kilabit.info>
package sql
diff --git a/lib/sql/meta.go b/lib/sql/meta.go
index 07c9e117..f24a94aa 100644
--- a/lib/sql/meta.go
+++ b/lib/sql/meta.go
@@ -1,6 +1,5 @@
-// Copyright 2024, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2024 Shulhan <ms@kilabit.info>
package sql
diff --git a/lib/sql/meta_example_test.go b/lib/sql/meta_example_test.go
index 35674cf8..9d1840a2 100644
--- a/lib/sql/meta_example_test.go
+++ b/lib/sql/meta_example_test.go
@@ -1,6 +1,5 @@
-// Copyright 2024, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2024 Shulhan <ms@kilabit.info>
package sql_test
diff --git a/lib/sql/meta_test.go b/lib/sql/meta_test.go
index b310a0e8..1b36604c 100644
--- a/lib/sql/meta_test.go
+++ b/lib/sql/meta_test.go
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2024 M. Shulhan <ms@kilabit.info>
+
package sql
import (
diff --git a/lib/sql/sql.go b/lib/sql/sql.go
index 3a76353d..fe25911f 100644
--- a/lib/sql/sql.go
+++ b/lib/sql/sql.go
@@ -1,6 +1,5 @@
-// Copyright 2020, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2020 Shulhan <ms@kilabit.info>
// Package sql is an extension to standard library "database/sql.DB" that
// provide common functionality across DBMS.
diff --git a/lib/ssh/client_test.go b/lib/ssh/client_test.go
index 09c93577..be0dbe7e 100644
--- a/lib/ssh/client_test.go
+++ b/lib/ssh/client_test.go
@@ -1,6 +1,5 @@
-// Copyright 2023, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2023 Shulhan <ms@kilabit.info>
package ssh
diff --git a/lib/ssh/sftp/client.go b/lib/ssh/sftp/client.go
index d5db3a3a..b0dae8a3 100644
--- a/lib/ssh/sftp/client.go
+++ b/lib/ssh/sftp/client.go
@@ -1,6 +1,5 @@
-// Copyright 2021, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2021 Shulhan <ms@kilabit.info>
package sftp
diff --git a/lib/ssh/sftp/client_test.go b/lib/ssh/sftp/client_test.go
index b490e9f6..3162c297 100644
--- a/lib/ssh/sftp/client_test.go
+++ b/lib/ssh/sftp/client_test.go
@@ -1,6 +1,5 @@
-// Copyright 2021, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2021 Shulhan <ms@kilabit.info>
package sftp
diff --git a/lib/ssh/sftp/dir_entry.go b/lib/ssh/sftp/dir_entry.go
index dd3ef4e3..d7b6cafc 100644
--- a/lib/ssh/sftp/dir_entry.go
+++ b/lib/ssh/sftp/dir_entry.go
@@ -1,6 +1,5 @@
-// Copyright 2021, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2021 Shulhan <ms@kilabit.info>
package sftp
diff --git a/lib/ssh/sftp/extensions.go b/lib/ssh/sftp/extensions.go
index f6730435..2be87947 100644
--- a/lib/ssh/sftp/extensions.go
+++ b/lib/ssh/sftp/extensions.go
@@ -1,6 +1,5 @@
-// Copyright 2021, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2021 Shulhan <ms@kilabit.info>
package sftp
diff --git a/lib/ssh/sftp/file_attrs_test.go b/lib/ssh/sftp/file_attrs_test.go
index 2991e2fe..6a285f37 100644
--- a/lib/ssh/sftp/file_attrs_test.go
+++ b/lib/ssh/sftp/file_attrs_test.go
@@ -1,6 +1,5 @@
-// Copyright 2021, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2021 Shulhan <ms@kilabit.info>
package sftp
diff --git a/lib/ssh/sftp/file_handle.go b/lib/ssh/sftp/file_handle.go
index d20b01b9..b1b7a7f5 100644
--- a/lib/ssh/sftp/file_handle.go
+++ b/lib/ssh/sftp/file_handle.go
@@ -1,6 +1,5 @@
-// Copyright 2021, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2021 Shulhan <ms@kilabit.info>
package sftp
diff --git a/lib/ssh/sftp/packet.go b/lib/ssh/sftp/packet.go
index 2460e1dd..8fa95c9e 100644
--- a/lib/ssh/sftp/packet.go
+++ b/lib/ssh/sftp/packet.go
@@ -1,6 +1,5 @@
-// Copyright 2021, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2021 Shulhan <ms@kilabit.info>
package sftp
diff --git a/lib/ssh/sftp/sftp.go b/lib/ssh/sftp/sftp.go
index 5ae85160..e51a022e 100644
--- a/lib/ssh/sftp/sftp.go
+++ b/lib/ssh/sftp/sftp.go
@@ -1,6 +1,5 @@
-// Copyright 2021, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2021 Shulhan <ms@kilabit.info>
// Package sftp implement SSH File Transfer Protocol v3 as defined in
// [draft-ietf-secsh-filexfer-02.txt].
diff --git a/lib/ssh/sftp/sftp_test.go b/lib/ssh/sftp/sftp_test.go
index 5e498352..c0672580 100644
--- a/lib/ssh/sftp/sftp_test.go
+++ b/lib/ssh/sftp/sftp_test.go
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2021 M. Shulhan <ms@kilabit.info>
+
package sftp
import (
diff --git a/lib/ssh/ssh.go b/lib/ssh/ssh.go
index 757405f4..bd654c34 100644
--- a/lib/ssh/ssh.go
+++ b/lib/ssh/ssh.go
@@ -1,6 +1,5 @@
-// Copyright 2020, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2020 Shulhan <ms@kilabit.info>
// Package ssh provide a wrapper for golang.org/x/crypto/ssh and a parser for
// SSH client configuration specification ssh_config(5).
diff --git a/lib/sshconfig/config_test.go b/lib/sshconfig/config_test.go
index 1d380ad4..8f2e5896 100644
--- a/lib/sshconfig/config_test.go
+++ b/lib/sshconfig/config_test.go
@@ -1,6 +1,5 @@
-// Copyright 2020, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2020 Shulhan <ms@kilabit.info>
package sshconfig
diff --git a/lib/sshconfig/match_criteria.go b/lib/sshconfig/match_criteria.go
index 4b0d65ad..ddef1775 100644
--- a/lib/sshconfig/match_criteria.go
+++ b/lib/sshconfig/match_criteria.go
@@ -1,6 +1,5 @@
-// Copyright 2020, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2020 Shulhan <ms@kilabit.info>
package sshconfig
diff --git a/lib/sshconfig/parser_test.go b/lib/sshconfig/parser_test.go
index f76bb09a..745c5fbb 100644
--- a/lib/sshconfig/parser_test.go
+++ b/lib/sshconfig/parser_test.go
@@ -1,6 +1,5 @@
-// Copyright 2020, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2020 Shulhan <ms@kilabit.info>
package sshconfig
diff --git a/lib/sshconfig/pattern.go b/lib/sshconfig/pattern.go
index f1dbaf79..429b9c5e 100644
--- a/lib/sshconfig/pattern.go
+++ b/lib/sshconfig/pattern.go
@@ -1,6 +1,5 @@
-// Copyright 2020, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2020 Shulhan <ms@kilabit.info>
package sshconfig
diff --git a/lib/sshconfig/permitted_cnames.go b/lib/sshconfig/permitted_cnames.go
index 181921da..9101eaf7 100644
--- a/lib/sshconfig/permitted_cnames.go
+++ b/lib/sshconfig/permitted_cnames.go
@@ -1,6 +1,5 @@
-// Copyright 2020, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2020 Shulhan <ms@kilabit.info>
package sshconfig
diff --git a/lib/sshconfig/section.go b/lib/sshconfig/section.go
index 9174bc87..fee1759f 100644
--- a/lib/sshconfig/section.go
+++ b/lib/sshconfig/section.go
@@ -1,6 +1,5 @@
-// Copyright 2020, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2020 Shulhan <ms@kilabit.info>
package sshconfig
diff --git a/lib/sshconfig/section_match_test.go b/lib/sshconfig/section_match_test.go
index 2310f66c..72814f30 100644
--- a/lib/sshconfig/section_match_test.go
+++ b/lib/sshconfig/section_match_test.go
@@ -1,6 +1,5 @@
-// Copyright 2020, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2020 Shulhan <ms@kilabit.info>
package sshconfig
diff --git a/lib/sshconfig/section_test.go b/lib/sshconfig/section_test.go
index 97125b8a..39076560 100644
--- a/lib/sshconfig/section_test.go
+++ b/lib/sshconfig/section_test.go
@@ -1,6 +1,5 @@
-// Copyright 2020, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2020 Shulhan <ms@kilabit.info>
package sshconfig
diff --git a/lib/sshconfig/testdata/config_get_test.txt b/lib/sshconfig/testdata/config_get_test.txt
index 7aa28784..581d271c 100644
--- a/lib/sshconfig/testdata/config_get_test.txt
+++ b/lib/sshconfig/testdata/config_get_test.txt
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2023 M. Shulhan <ms@kilabit.info>
+
Test output for [Section.Get].
<<< empty
diff --git a/lib/sshconfig/testdata/config_merge_test.txt b/lib/sshconfig/testdata/config_merge_test.txt
index ef058e1c..0926faab 100644
--- a/lib/sshconfig/testdata/config_merge_test.txt
+++ b/lib/sshconfig/testdata/config_merge_test.txt
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2023 M. Shulhan <ms@kilabit.info>
+
Test data for [Config.Merge].
<<< my.example.local
diff --git a/lib/strings/parser.go b/lib/strings/parser.go
index 6813a45f..5d6fc6b5 100644
--- a/lib/strings/parser.go
+++ b/lib/strings/parser.go
@@ -1,6 +1,5 @@
-// Copyright 2019, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 Shulhan <ms@kilabit.info>
package strings
diff --git a/lib/strings/parser_benchmark_test.go b/lib/strings/parser_benchmark_test.go
index a41c2128..8ecc5dbd 100644
--- a/lib/strings/parser_benchmark_test.go
+++ b/lib/strings/parser_benchmark_test.go
@@ -1,6 +1,5 @@
-// Copyright 2019, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 Shulhan <ms@kilabit.info>
package strings
diff --git a/lib/strings/parser_example_test.go b/lib/strings/parser_example_test.go
index 726609cb..71491811 100644
--- a/lib/strings/parser_example_test.go
+++ b/lib/strings/parser_example_test.go
@@ -1,6 +1,5 @@
-// Copyright 2019, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 Shulhan <ms@kilabit.info>
package strings
diff --git a/lib/strings/row_example_test.go b/lib/strings/row_example_test.go
index 0b4acfc0..1c05b39d 100644
--- a/lib/strings/row_example_test.go
+++ b/lib/strings/row_example_test.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package strings
diff --git a/lib/strings/row_test.go b/lib/strings/row_test.go
index bcc48892..5d302a3d 100644
--- a/lib/strings/row_test.go
+++ b/lib/strings/row_test.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package strings
diff --git a/lib/strings/statistic.go b/lib/strings/statistic.go
index 0a77c6ad..5be97bc1 100644
--- a/lib/strings/statistic.go
+++ b/lib/strings/statistic.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package strings
diff --git a/lib/strings/statistic_example_test.go b/lib/strings/statistic_example_test.go
index be989d64..4c8ea2e0 100644
--- a/lib/strings/statistic_example_test.go
+++ b/lib/strings/statistic_example_test.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package strings
diff --git a/lib/strings/statistic_test.go b/lib/strings/statistic_test.go
index ff70a034..c5d539c2 100644
--- a/lib/strings/statistic_test.go
+++ b/lib/strings/statistic_test.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package strings
diff --git a/lib/strings/string.go b/lib/strings/string.go
index 46464257..ac959a39 100644
--- a/lib/strings/string.go
+++ b/lib/strings/string.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package strings
diff --git a/lib/strings/string_example_test.go b/lib/strings/string_example_test.go
index f83be421..119832c8 100644
--- a/lib/strings/string_example_test.go
+++ b/lib/strings/string_example_test.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package strings
diff --git a/lib/strings/string_test.go b/lib/strings/string_test.go
index 1470cd18..ae1424ff 100644
--- a/lib/strings/string_test.go
+++ b/lib/strings/string_test.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package strings
diff --git a/lib/strings/strings_example_test.go b/lib/strings/strings_example_test.go
index c69e52c5..c0324cda 100644
--- a/lib/strings/strings_example_test.go
+++ b/lib/strings/strings_example_test.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package strings
diff --git a/lib/strings/strings_test.go b/lib/strings/strings_test.go
index 7a005187..e53835b6 100644
--- a/lib/strings/strings_test.go
+++ b/lib/strings/strings_test.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package strings
diff --git a/lib/strings/table_example_test.go b/lib/strings/table_example_test.go
index 57160171..e6a6cba8 100644
--- a/lib/strings/table_example_test.go
+++ b/lib/strings/table_example_test.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package strings
diff --git a/lib/strings/table_test.go b/lib/strings/table_test.go
index 774ac2d6..bf8a3b01 100644
--- a/lib/strings/table_test.go
+++ b/lib/strings/table_test.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package strings
diff --git a/lib/strings/testdata/clean_uri_test.txt b/lib/strings/testdata/clean_uri_test.txt
index fd85d251..f4197da4 100644
--- a/lib/strings/testdata/clean_uri_test.txt
+++ b/lib/strings/testdata/clean_uri_test.txt
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2022 M. Shulhan <ms@kilabit.info>
+
This test remove any URL from the strings.
>>>
diff --git a/lib/strings/testdata/clean_wiki_markup_test.txt b/lib/strings/testdata/clean_wiki_markup_test.txt
index 852d52e4..0fa432c7 100644
--- a/lib/strings/testdata/clean_wiki_markup_test.txt
+++ b/lib/strings/testdata/clean_wiki_markup_test.txt
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2022 M. Shulhan <ms@kilabit.info>
+
>>>
==External links==
*[http://www.bigfinish.com/24-Doctor-Who-The-Eye-of-the-Scorpion Big Finish Productions - ''The Eye of the Scorpion'']
diff --git a/lib/strings/testdata/split_test.txt b/lib/strings/testdata/split_test.txt
index 630738be..9ff96327 100644
--- a/lib/strings/testdata/split_test.txt
+++ b/lib/strings/testdata/split_test.txt
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2022 M. Shulhan <ms@kilabit.info>
+
Test Split with clean and unique parameters.
>>> Single-line
diff --git a/lib/strings/wikimarkup.go b/lib/strings/wikimarkup.go
index f7cc4be0..8ad35ce3 100644
--- a/lib/strings/wikimarkup.go
+++ b/lib/strings/wikimarkup.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package strings
diff --git a/lib/tabula/Makefile b/lib/tabula/Makefile
index d77283bd..9f86a8ad 100644
--- a/lib/tabula/Makefile
+++ b/lib/tabula/Makefile
@@ -1,8 +1,6 @@
#!/bin/make
-
-## Copyright 2017, Shulhan <ms@kilabit.info>. All rights reserved.
-## Use of this source code is governed by a BSD-style license that can be found
-## in the LICENSE file.
+# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-FileCopyrightText: 2017 Shulhan <ms@kilabit.info>
SRC_FILES :=$(shell go list -f '{{ join .GoFiles " " }}')
TEST_FILES :=$(shell go list -f '{{ join .TestGoFiles " " }}')
diff --git a/lib/tabula/README.html b/lib/tabula/README.html
deleted file mode 100644
index ca10e819..00000000
--- a/lib/tabula/README.html
+++ /dev/null
@@ -1,177 +0,0 @@
-<!DOCTYPE html>
-<html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1" />
- <meta name="theme-color" content="#375EAB" />
-
- <title></title>
- </head>
- <body>
- <div class="topbar">
- <div class="container">
- <div class="top-heading">
- <a href="/">github.com/shuLhan/share</a>
- </div>
- <div class="menu">
- <a href="https://godoc.org/github.com/shuLhan/share">GoDoc</a>
- </div>
- <div class="menu">
- <a href="/CHANGELOG.html">Changelog</a>
- </div>
- </div>
- </div>
-
- <div class="page">
- <div class="container">
- <h1></h1>
- <p><a href="https://godoc.org/github.com/shuLhan/share/lib/tabula"><img src="https://godoc.org/github.com/shuLhan/share/lib/tabula?status.svg" alt="GoDoc"></a>
-<a href="https://goreportcard.com/report/github.com/shuLhan/share/lib/tabula"><img src="https://goreportcard.com/badge/github.com/shuLhan/share/lib/tabula" alt="Go Report Card"></a>
-<img src="https://cover.run/go/github.com/shuLhan/share/lib/tabula.svg" alt="cover.run go"></p>
-<p>Package tabula is a Go library for working with rows, columns, or matrix
-(table), or in another terms working with data set.</p>
-<h1>Overview</h1>
-<p>Go's slice gave a flexible way to manage sequence of data in one type, but what
-if you want to manage a sequence of value but with different type of data?
-Or manage a bunch of values like a table?</p>
-<p>You can use this library to manage sequence of value with different type
-and manage data in two dimensional tuple.</p>
-<h2>Terminology</h2>
-<p>Here are some terminologies that we used in developing this library, which may
-help reader understand the internal and API.</p>
-<p>Record is a single cell in row or column, or the smallest building block of
-dataset.</p>
-<p>Row is a horizontal representation of records in dataset.</p>
-<p>Column is a vertical representation of records in dataset.
-Each column has a unique name and has the same type data.</p>
-<p>Dataset is a collection of rows and columns.</p>
-<p>Given those definitions we can draw the representation of rows, columns, or
-matrix:</p>
-<pre><code> COL-0 COL-1 ... COL-x
-ROW-0: record record ... record
-ROW-1: record record ... record
-...
-ROW-y: record record ... record
-</code></pre>
-<h2>What make this package different from other dataset packages?</h2>
-<h3>Record Type</h3>
-<p>There are only three valid type in record: int64, float64, and string.</p>
-<p>Each record is a pointer to interface value. Which means,</p>
-<ul>
-<li>Switching between rows to columns mode, or vice versa, is only a matter of
-pointer switching, no memory relocations.</li>
-<li>When using matrix mode, additional memory is used only to allocate slice, the
-record in each rows and columns is shared.</li>
-</ul>
-<h3>Dataset Mode</h3>
-<p>Tabula has three mode for dataset: rows, columns, or matrix.</p>
-<p>For example, given a table of data,</p>
-<pre><code>col1,col2,col3
-a,b,c
-1,2,3
-</code></pre>
-<ul>
-<li>
-<p>When in &quot;rows&quot; mode, each line is saved in its own slice, resulting in Rows:</p>
-<pre><code>Rows[0]: [a b c]
-Rows[1]: [1 2 3]
-</code></pre>
-<p>Columns is used only to save record metadata: column name, type, flag and
-value space.</p>
-</li>
-<li>
-<p>When in &quot;columns&quot; mode, each line saved in columns, resulting in Columns:</p>
-<pre><code>Columns[0]: {col1 0 0 [] [a 1]}
-Columns[1]: {col2 0 0 [] [b 2]}
-Columns[1]: {col3 0 0 [] [c 3]}
-</code></pre>
-<p>Each column will contain metadata including column name, type, flag, and
-value space (all possible value that <em>may</em> contain in column value).</p>
-<p>Rows in &quot;columns&quot; mode is empty.</p>
-</li>
-<li>
-<p>When in &quot;matrix&quot; mode, each record is saved both in row and column using
-shared pointer to record.</p>
-<p>Matrix mode consume more memory by allocating two slice in rows and columns,
-but give flexible way to manage records.</p>
-</li>
-</ul>
-<h2>Features</h2>
-<ul>
-<li>
-<p><strong>Switching between rows and columns mode</strong>.</p>
-</li>
-<li>
-<p><a href="https://godoc.org/github.com/shuLhan/share/lib/tabula#RandomPickRows"><strong>Random pick rows with or without replacement</strong></a>.</p>
-</li>
-<li>
-<p><a href="https://godoc.org/github.com/shuLhan/share/lib/tabula#RandomPickColumns"><strong>Random pick columns with or without replacement</strong></a>.</p>
-</li>
-<li>
-<p><a href="https://godoc.org/github.com/shuLhan/share/lib/tabula#SelectColumnsByIdx"><strong>Select column from dataset by index</strong></a>.</p>
-</li>
-<li>
-<p><a href="https://godoc.org/github.com/shuLhan/share/lib/tabula#SortColumnsByIndex"><strong>Sort columns by index</strong></a>,
-or indirect sort.</p>
-</li>
-<li>
-<p><a href="https://godoc.org/github.com/shuLhan/share/lib/tabula#SplitRowsByNumeric"><strong>Split rows value by numeric</strong></a>.
-For example, given two numeric rows,</p>
-<pre><code>A: {1,2,3,4}
-B: {5,6,7,8}
-</code></pre>
-<p>if we split row by value 7, the data will splitted into left set</p>
-<pre><code>A': {1,2}
-B': {5,6}
-</code></pre>
-<p>and the right set would be</p>
-<pre><code>A'': {3,4}
-B'': {7,8}
-</code></pre>
-</li>
-<li>
-<p><a href="https://godoc.org/github.com/shuLhan/share/lib/tabula#SplitRowsByCategorical"><strong>Split rows by string</strong></a>.
-For example, given two rows,</p>
-<pre><code>X: [A,B,A,B,C,D,C,D]
-Y: [1,2,3,4,5,6,7,8]
-</code></pre>
-<p>if we split the rows with value set <code>[A,C]</code>, the data will splitted into left
-set which contain all rows that have A or C,</p>
-<pre><code> X': [A,A,C,C]
- Y': [1,3,5,7]
-</code></pre>
-<p>and the right set, excluded set, will contain all rows which is not A or C,</p>
-<pre><code> X'': [B,B,D,D]
- Y'': [2,4,6,8]
-</code></pre>
-</li>
-<li>
-<p><a href="https://godoc.org/github.com/shuLhan/share/lib/tabula#SelectRowsWhere"><strong>Select row where</strong></a>.
-Select row at column index x where their value is equal to y (an analogy to
-<em>select where</em> in SQL).
-For example, given a rows of dataset,</p>
-<pre><code>ROW-1: {1,A}
-ROW-2: {2,B}
-ROW-3: {3,A}
-ROW-4: {4,C}
-</code></pre>
-<p>we can select row where the second column contain 'A', which result in,</p>
-<pre><code>ROW-1: {1,A}
-ROW-3: {3,A}
-</code></pre>
-</li>
-</ul>
-
- </div>
-
- </div>
-
-
- <div class="footer">
- Copyright 2019, Shulhan &lt;ms@kilabit.info&gt;. All rights reserved.
- <br />
- Use of this source code is governed by a BSD-style license that can be
- found in the <a href="/LICENSE">LICENSE</a> file.
- </div>
- </body>
-</html>
diff --git a/lib/tabula/README.md b/lib/tabula/README.md
index 168b75bd..3a29fd94 100644
--- a/lib/tabula/README.md
+++ b/lib/tabula/README.md
@@ -1,3 +1,6 @@
+<!-- SPDX-License-Identifier: BSD-3-Clause -->
+<!-- SPDX-FileCopyrightText: 2018 M. Shulhan <ms@kilabit.info> -->
+
[![GoDoc](https://godoc.org/git.sr.ht/~shulhan/pakakeh.go/lib/tabula?status.svg)](https://godoc.org/git.sr.ht/~shulhan/pakakeh.go/lib/tabula)
[![Go Report Card](https://goreportcard.com/badge/git.sr.ht/~shulhan/pakakeh.go/lib/tabula)](https://goreportcard.com/report/git.sr.ht/~shulhan/pakakeh.go/lib/tabula)
![cover.run go](https://cover.run/go/git.sr.ht/~shulhan/pakakeh.go/lib/tabula.svg)
diff --git a/lib/tabula/clasetinterface.go b/lib/tabula/clasetinterface.go
index 30a5514d..017c8b9a 100644
--- a/lib/tabula/clasetinterface.go
+++ b/lib/tabula/clasetinterface.go
@@ -1,5 +1,5 @@
-// Copyright 2017, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be found
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2017 Shulhan <ms@kilabit.info>
// in the LICENSE file.
package tabula
diff --git a/lib/tabula/column_test.go b/lib/tabula/column_test.go
index 967c3e5d..c9d08719 100644
--- a/lib/tabula/column_test.go
+++ b/lib/tabula/column_test.go
@@ -1,5 +1,5 @@
-// Copyright 2017, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be found
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2017 Shulhan <ms@kilabit.info>
// in the LICENSE file.
package tabula
diff --git a/lib/tabula/columns_test.go b/lib/tabula/columns_test.go
index 776693bf..f70a6aca 100644
--- a/lib/tabula/columns_test.go
+++ b/lib/tabula/columns_test.go
@@ -1,5 +1,5 @@
-// Copyright 2017, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be found
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2017 Shulhan <ms@kilabit.info>
// in the LICENSE file.
package tabula
diff --git a/lib/tabula/dataset_bench_test.go b/lib/tabula/dataset_bench_test.go
index 86e36cc9..76b45350 100644
--- a/lib/tabula/dataset_bench_test.go
+++ b/lib/tabula/dataset_bench_test.go
@@ -1,5 +1,5 @@
-// Copyright 2017, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be found
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2017 Shulhan <ms@kilabit.info>
// in the LICENSE file.
package tabula
diff --git a/lib/tabula/dataset_test.go b/lib/tabula/dataset_test.go
index 364c038f..b9778301 100644
--- a/lib/tabula/dataset_test.go
+++ b/lib/tabula/dataset_test.go
@@ -1,5 +1,5 @@
-// Copyright 2017, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be found
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2017 Shulhan <ms@kilabit.info>
// in the LICENSE file.
package tabula
diff --git a/lib/tabula/maprows.go b/lib/tabula/maprows.go
index ba6f4111..52246d28 100644
--- a/lib/tabula/maprows.go
+++ b/lib/tabula/maprows.go
@@ -1,5 +1,5 @@
-// Copyright 2017, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be found
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2017 Shulhan <ms@kilabit.info>
// in the LICENSE file.
package tabula
diff --git a/lib/tabula/maprows_test.go b/lib/tabula/maprows_test.go
index 169f488d..afebbb40 100644
--- a/lib/tabula/maprows_test.go
+++ b/lib/tabula/maprows_test.go
@@ -1,5 +1,5 @@
-// Copyright 2017, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be found
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2017 Shulhan <ms@kilabit.info>
// in the LICENSE file.
package tabula
diff --git a/lib/tabula/matrix.go b/lib/tabula/matrix.go
index 9475aa4e..fd4899e6 100644
--- a/lib/tabula/matrix.go
+++ b/lib/tabula/matrix.go
@@ -1,5 +1,5 @@
-// Copyright 2017, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be found
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2017 Shulhan <ms@kilabit.info>
// in the LICENSE file.
package tabula
diff --git a/lib/tabula/record_test.go b/lib/tabula/record_test.go
index 2ec93748..5b4933b6 100644
--- a/lib/tabula/record_test.go
+++ b/lib/tabula/record_test.go
@@ -1,5 +1,5 @@
-// Copyright 2017, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be found
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2017 Shulhan <ms@kilabit.info>
// in the LICENSE file.
package tabula
diff --git a/lib/tabula/records_test.go b/lib/tabula/records_test.go
index f1128725..9166b47b 100644
--- a/lib/tabula/records_test.go
+++ b/lib/tabula/records_test.go
@@ -1,5 +1,5 @@
-// Copyright 2017, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be found
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2017 Shulhan <ms@kilabit.info>
// in the LICENSE file.
package tabula
diff --git a/lib/tabula/row_test.go b/lib/tabula/row_test.go
index 92d6d73d..bd470078 100644
--- a/lib/tabula/row_test.go
+++ b/lib/tabula/row_test.go
@@ -1,5 +1,5 @@
-// Copyright 2017, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be found
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2017 Shulhan <ms@kilabit.info>
// in the LICENSE file.
package tabula
diff --git a/lib/tabula/rows.go b/lib/tabula/rows.go
index d753d87d..ccba310c 100644
--- a/lib/tabula/rows.go
+++ b/lib/tabula/rows.go
@@ -1,5 +1,5 @@
-// Copyright 2017, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be found
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2017 Shulhan <ms@kilabit.info>
// in the LICENSE file.
package tabula
diff --git a/lib/tabula/rows_test.go b/lib/tabula/rows_test.go
index b9f093fc..82ddc517 100644
--- a/lib/tabula/rows_test.go
+++ b/lib/tabula/rows_test.go
@@ -1,5 +1,5 @@
-// Copyright 2017, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be found
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2017 Shulhan <ms@kilabit.info>
// in the LICENSE file.
package tabula
diff --git a/lib/tabula/tabula.go b/lib/tabula/tabula.go
index 2b85df44..d5a1450d 100644
--- a/lib/tabula/tabula.go
+++ b/lib/tabula/tabula.go
@@ -1,5 +1,5 @@
-// Copyright 2017, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be found
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2017 Shulhan <ms@kilabit.info>
// in the LICENSE file.
// Package tabula is a Go library for working with rows, columns, or matrix
diff --git a/lib/tabula/tabula_test.go b/lib/tabula/tabula_test.go
index 1d0f8be4..26f0d34f 100644
--- a/lib/tabula/tabula_test.go
+++ b/lib/tabula/tabula_test.go
@@ -1,5 +1,5 @@
-// Copyright 2017, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be found
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2017 Shulhan <ms@kilabit.info>
// in the LICENSE file.
package tabula
diff --git a/lib/telemetry/agent.go b/lib/telemetry/agent.go
index 3eafe3a0..5b99230d 100644
--- a/lib/telemetry/agent.go
+++ b/lib/telemetry/agent.go
@@ -1,6 +1,5 @@
-// Copyright 2023, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2023 Shulhan <ms@kilabit.info>
package telemetry
diff --git a/lib/telemetry/agent_options.go b/lib/telemetry/agent_options.go
index 95e707d4..4f90d1cb 100644
--- a/lib/telemetry/agent_options.go
+++ b/lib/telemetry/agent_options.go
@@ -1,6 +1,5 @@
-// Copyright 2023, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2023 Shulhan <ms@kilabit.info>
package telemetry
diff --git a/lib/telemetry/buffer_forwarder.go b/lib/telemetry/buffer_forwarder.go
index e0adca7c..b1166912 100644
--- a/lib/telemetry/buffer_forwarder.go
+++ b/lib/telemetry/buffer_forwarder.go
@@ -1,6 +1,5 @@
-// Copyright 2023, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2023 Shulhan <ms@kilabit.info>
package telemetry
diff --git a/lib/telemetry/buffer_forwarder_example_test.go b/lib/telemetry/buffer_forwarder_example_test.go
index 6f043ca3..db1e4397 100644
--- a/lib/telemetry/buffer_forwarder_example_test.go
+++ b/lib/telemetry/buffer_forwarder_example_test.go
@@ -1,6 +1,5 @@
-// Copyright 2023, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2023 Shulhan <ms@kilabit.info>
package telemetry_test
diff --git a/lib/telemetry/collector.go b/lib/telemetry/collector.go
index 75572f4a..c96e8e6d 100644
--- a/lib/telemetry/collector.go
+++ b/lib/telemetry/collector.go
@@ -1,6 +1,5 @@
-// Copyright 2023, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2023 Shulhan <ms@kilabit.info>
package telemetry
diff --git a/lib/telemetry/context.go b/lib/telemetry/context.go
index 41f90a74..f5054f1d 100644
--- a/lib/telemetry/context.go
+++ b/lib/telemetry/context.go
@@ -1,6 +1,5 @@
-// Copyright 2023, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2023 Shulhan <ms@kilabit.info>
package telemetry
diff --git a/lib/telemetry/file_forwarder.go b/lib/telemetry/file_forwarder.go
index d3b95d7f..d6336534 100644
--- a/lib/telemetry/file_forwarder.go
+++ b/lib/telemetry/file_forwarder.go
@@ -1,6 +1,5 @@
-// Copyright 2023, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2023 Shulhan <ms@kilabit.info>
package telemetry
diff --git a/lib/telemetry/formatter.go b/lib/telemetry/formatter.go
index dc4bc5d0..7634a0b6 100644
--- a/lib/telemetry/formatter.go
+++ b/lib/telemetry/formatter.go
@@ -1,6 +1,5 @@
-// Copyright 2023, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2023 Shulhan <ms@kilabit.info>
package telemetry
diff --git a/lib/telemetry/forwarder.go b/lib/telemetry/forwarder.go
index c958acc3..30761749 100644
--- a/lib/telemetry/forwarder.go
+++ b/lib/telemetry/forwarder.go
@@ -1,6 +1,5 @@
-// Copyright 2023, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2023 Shulhan <ms@kilabit.info>
package telemetry
diff --git a/lib/telemetry/go_memstats_collector.go b/lib/telemetry/go_memstats_collector.go
index 1aa8acc2..c96f120e 100644
--- a/lib/telemetry/go_memstats_collector.go
+++ b/lib/telemetry/go_memstats_collector.go
@@ -1,6 +1,5 @@
-// Copyright 2023, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2023 Shulhan <ms@kilabit.info>
package telemetry
diff --git a/lib/telemetry/go_metrics_collector.go b/lib/telemetry/go_metrics_collector.go
index f0f0dcd6..7b43a718 100644
--- a/lib/telemetry/go_metrics_collector.go
+++ b/lib/telemetry/go_metrics_collector.go
@@ -1,6 +1,5 @@
-// Copyright 2023, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2023 Shulhan <ms@kilabit.info>
package telemetry
diff --git a/lib/telemetry/ilp_formatter_test.go b/lib/telemetry/ilp_formatter_test.go
index 2fc772a6..42c70233 100644
--- a/lib/telemetry/ilp_formatter_test.go
+++ b/lib/telemetry/ilp_formatter_test.go
@@ -1,6 +1,5 @@
-// Copyright 2023, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2023 Shulhan <ms@kilabit.info>
package telemetry
diff --git a/lib/telemetry/metadata.go b/lib/telemetry/metadata.go
index 75742c77..41565b63 100644
--- a/lib/telemetry/metadata.go
+++ b/lib/telemetry/metadata.go
@@ -1,6 +1,5 @@
-// Copyright 2023, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2023 Shulhan <ms@kilabit.info>
package telemetry
diff --git a/lib/telemetry/metadata_example_test.go b/lib/telemetry/metadata_example_test.go
index 1d59800b..914e3043 100644
--- a/lib/telemetry/metadata_example_test.go
+++ b/lib/telemetry/metadata_example_test.go
@@ -1,6 +1,5 @@
-// Copyright 2023, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2023 Shulhan <ms@kilabit.info>
package telemetry_test
diff --git a/lib/telemetry/metric.go b/lib/telemetry/metric.go
index 8cab29a2..5d4bfc51 100644
--- a/lib/telemetry/metric.go
+++ b/lib/telemetry/metric.go
@@ -1,6 +1,5 @@
-// Copyright 2023, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2023 Shulhan <ms@kilabit.info>
package telemetry
diff --git a/lib/telemetry/questdb_forwarder.go b/lib/telemetry/questdb_forwarder.go
index 455d051b..f2c0158b 100644
--- a/lib/telemetry/questdb_forwarder.go
+++ b/lib/telemetry/questdb_forwarder.go
@@ -1,6 +1,5 @@
-// Copyright 2023, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2023 Shulhan <ms@kilabit.info>
package telemetry
diff --git a/lib/telemetry/questdb_options.go b/lib/telemetry/questdb_options.go
index 94f2f8e7..fc75a558 100644
--- a/lib/telemetry/questdb_options.go
+++ b/lib/telemetry/questdb_options.go
@@ -1,6 +1,5 @@
-// Copyright 2023, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2023 Shulhan <ms@kilabit.info>
package telemetry
diff --git a/lib/telemetry/stdout_forwarder.go b/lib/telemetry/stdout_forwarder.go
index 4e84898b..d52f5995 100644
--- a/lib/telemetry/stdout_forwarder.go
+++ b/lib/telemetry/stdout_forwarder.go
@@ -1,6 +1,5 @@
-// Copyright 2023, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2023 Shulhan <ms@kilabit.info>
package telemetry
diff --git a/lib/telemetry/telemetry.go b/lib/telemetry/telemetry.go
index cdf654a0..16f5b386 100644
--- a/lib/telemetry/telemetry.go
+++ b/lib/telemetry/telemetry.go
@@ -1,6 +1,5 @@
-// Copyright 2023, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2023 Shulhan <ms@kilabit.info>
// Package telemetry is a library for collecting various [Metric], for example
// from standard [runtime/metrics], and send or write it to one or more
diff --git a/lib/telemetry/timestamper.go b/lib/telemetry/timestamper.go
index 0d141f9c..b051b9cd 100644
--- a/lib/telemetry/timestamper.go
+++ b/lib/telemetry/timestamper.go
@@ -1,6 +1,5 @@
-// Copyright 2023, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2023 Shulhan <ms@kilabit.info>
package telemetry
diff --git a/lib/test/buffer_writer.go b/lib/test/buffer_writer.go
index c9e3790b..9a0094d8 100644
--- a/lib/test/buffer_writer.go
+++ b/lib/test/buffer_writer.go
@@ -1,6 +1,5 @@
-// Copyright 2022, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2022 Shulhan <ms@kilabit.info>
package test
diff --git a/lib/test/data_test.go b/lib/test/data_test.go
index 139599a5..920bc763 100644
--- a/lib/test/data_test.go
+++ b/lib/test/data_test.go
@@ -1,6 +1,5 @@
-// Copyright 2022, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2022 Shulhan <ms@kilabit.info>
package test
diff --git a/lib/test/example_test.go b/lib/test/example_test.go
index 03264a3e..039515e3 100644
--- a/lib/test/example_test.go
+++ b/lib/test/example_test.go
@@ -1,6 +1,5 @@
-// Copyright 2022, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2022 Shulhan <ms@kilabit.info>
package test_test
diff --git a/lib/test/httptest/httptest_test.go b/lib/test/httptest/httptest_test.go
index 28bf031d..ce155d68 100644
--- a/lib/test/httptest/httptest_test.go
+++ b/lib/test/httptest/httptest_test.go
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2024 M. Shulhan <ms@kilabit.info>
+
package httptest_test
import (
diff --git a/lib/test/httptest/simulate_request.go b/lib/test/httptest/simulate_request.go
index fe931ce9..2166b412 100644
--- a/lib/test/httptest/simulate_request.go
+++ b/lib/test/httptest/simulate_request.go
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2024 M. Shulhan <ms@kilabit.info>
+
package httptest
import (
diff --git a/lib/test/httptest/simulate_result.go b/lib/test/httptest/simulate_result.go
index a37aa623..546bd885 100644
--- a/lib/test/httptest/simulate_result.go
+++ b/lib/test/httptest/simulate_result.go
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2024 M. Shulhan <ms@kilabit.info>
+
package httptest
import (
diff --git a/lib/test/httptest/simulate_result_test.go b/lib/test/httptest/simulate_result_test.go
index 297bdc06..df38a846 100644
--- a/lib/test/httptest/simulate_result_test.go
+++ b/lib/test/httptest/simulate_result_test.go
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2024 M. Shulhan <ms@kilabit.info>
+
package httptest_test
import (
diff --git a/lib/test/mock/mock.go b/lib/test/mock/mock.go
index 23da6c21..823b5e47 100644
--- a/lib/test/mock/mock.go
+++ b/lib/test/mock/mock.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
// Package mock provide a mocking for standard input, standard output,
// standard error, io.ReadWriter, and [rand.Reader].
diff --git a/lib/test/mock/rand_reader.go b/lib/test/mock/rand_reader.go
index aebc3260..1169ace1 100644
--- a/lib/test/mock/rand_reader.go
+++ b/lib/test/mock/rand_reader.go
@@ -1,6 +1,5 @@
-// Copyright 2024, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2024 Shulhan <ms@kilabit.info>
package mock
diff --git a/lib/test/mock/readwriter.go b/lib/test/mock/readwriter.go
index fa139078..66b10b2f 100644
--- a/lib/test/mock/readwriter.go
+++ b/lib/test/mock/readwriter.go
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2023 M. Shulhan <ms@kilabit.info>
+
package mock
import (
diff --git a/lib/test/mock/readwriter_test.go b/lib/test/mock/readwriter_test.go
index 0027a980..048f898b 100644
--- a/lib/test/mock/readwriter_test.go
+++ b/lib/test/mock/readwriter_test.go
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2023 M. Shulhan <ms@kilabit.info>
+
package mock
import (
diff --git a/lib/test/testdata/data1_test.txt b/lib/test/testdata/data1_test.txt
index 323ab56f..80965f7a 100644
--- a/lib/test/testdata/data1_test.txt
+++ b/lib/test/testdata/data1_test.txt
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2022 M. Shulhan <ms@kilabit.info>
+
key: value
Description of test1.
>>>
diff --git a/lib/test/testdata/data2_test.txt b/lib/test/testdata/data2_test.txt
index 9a1ebdcc..6ada22a5 100644
--- a/lib/test/testdata/data2_test.txt
+++ b/lib/test/testdata/data2_test.txt
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2022 M. Shulhan <ms@kilabit.info>
+
>>>
another test input.
diff --git a/lib/test/writer.go b/lib/test/writer.go
index 3d6471d5..63b0fcc0 100644
--- a/lib/test/writer.go
+++ b/lib/test/writer.go
@@ -1,6 +1,5 @@
-// Copyright 2022, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2022 Shulhan <ms@kilabit.info>
package test
diff --git a/lib/text/chunk_test.go b/lib/text/chunk_test.go
index 403d8c65..8d2efc11 100644
--- a/lib/text/chunk_test.go
+++ b/lib/text/chunk_test.go
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2022 M. Shulhan <ms@kilabit.info>
+
package text
import (
diff --git a/lib/text/chunks.go b/lib/text/chunks.go
index 83804e05..05a43cab 100644
--- a/lib/text/chunks.go
+++ b/lib/text/chunks.go
@@ -1,6 +1,5 @@
-// Copyright 2018 Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package text
diff --git a/lib/text/diff/diff.go b/lib/text/diff/diff.go
index ecd2dfd3..1286cde1 100644
--- a/lib/text/diff/diff.go
+++ b/lib/text/diff/diff.go
@@ -1,6 +1,5 @@
-// Copyright 2018 Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
// Package diff implement text comparison.
package diff
diff --git a/lib/text/diff/diff_test.go b/lib/text/diff/diff_test.go
index 73a9450d..0cc6a002 100644
--- a/lib/text/diff/diff_test.go
+++ b/lib/text/diff/diff_test.go
@@ -1,6 +1,5 @@
-// Copyright 2018 Mhd Sulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Mhd Sulhan <ms@kilabit.info>
package diff
diff --git a/lib/text/diff/diffinterface.go b/lib/text/diff/diffinterface.go
index 58fd88d1..015e636a 100644
--- a/lib/text/diff/diffinterface.go
+++ b/lib/text/diff/diffinterface.go
@@ -1,6 +1,5 @@
-// Copyright 2018 Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package diff
diff --git a/lib/text/diff/linechange.go b/lib/text/diff/linechange.go
index fc34c23d..999fe002 100644
--- a/lib/text/diff/linechange.go
+++ b/lib/text/diff/linechange.go
@@ -1,6 +1,5 @@
-// Copyright 2018 Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package diff
diff --git a/lib/text/diff/linechanges.go b/lib/text/diff/linechanges.go
index 2c82e677..5549f568 100644
--- a/lib/text/diff/linechanges.go
+++ b/lib/text/diff/linechanges.go
@@ -1,6 +1,5 @@
-// Copyright 2018 Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package diff
diff --git a/lib/text/line.go b/lib/text/line.go
index b5a23b3a..80854e26 100644
--- a/lib/text/line.go
+++ b/lib/text/line.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package text
diff --git a/lib/text/line_test.go b/lib/text/line_test.go
index dce2e040..8e96cb93 100644
--- a/lib/text/line_test.go
+++ b/lib/text/line_test.go
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2022 M. Shulhan <ms@kilabit.info>
+
package text
import (
diff --git a/lib/text/lines.go b/lib/text/lines.go
index 6003e674..96d1e08a 100644
--- a/lib/text/lines.go
+++ b/lib/text/lines.go
@@ -1,6 +1,5 @@
-// Copyright 2018 Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package text
diff --git a/lib/text/lines_test.go b/lib/text/lines_test.go
index ea29f44a..8061fd1a 100644
--- a/lib/text/lines_test.go
+++ b/lib/text/lines_test.go
@@ -1,6 +1,5 @@
-// Copyright 2021 Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2021 Shulhan <ms@kilabit.info>
package text
diff --git a/lib/text/text.go b/lib/text/text.go
index ce25af9c..2adba466 100644
--- a/lib/text/text.go
+++ b/lib/text/text.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
// Package text provide common a library for working with text.
package text
diff --git a/lib/time/clock.go b/lib/time/clock.go
index 83f57dee..2f91d92a 100644
--- a/lib/time/clock.go
+++ b/lib/time/clock.go
@@ -1,6 +1,5 @@
-// Copyright 2023, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2023 Shulhan <ms@kilabit.info>
package time
diff --git a/lib/time/clock_example_test.go b/lib/time/clock_example_test.go
index 13484d48..9702da03 100644
--- a/lib/time/clock_example_test.go
+++ b/lib/time/clock_example_test.go
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2023 M. Shulhan <ms@kilabit.info>
+
package time_test
import (
diff --git a/lib/time/clock_test.go b/lib/time/clock_test.go
index f64084e4..7281de42 100644
--- a/lib/time/clock_test.go
+++ b/lib/time/clock_test.go
@@ -1,6 +1,5 @@
-// Copyright 2023, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2023 Shulhan <ms@kilabit.info>
package time
diff --git a/lib/time/duration.go b/lib/time/duration.go
index 26d70245..a49e5832 100644
--- a/lib/time/duration.go
+++ b/lib/time/duration.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package time
diff --git a/lib/time/duration_bench_test.go b/lib/time/duration_bench_test.go
index 9fcaeb3a..91579eea 100644
--- a/lib/time/duration_bench_test.go
+++ b/lib/time/duration_bench_test.go
@@ -1,6 +1,5 @@
-// Copyright 2019, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2019 Shulhan <ms@kilabit.info>
package time
diff --git a/lib/time/duration_test.go b/lib/time/duration_test.go
index ccfc0c20..f4de064f 100644
--- a/lib/time/duration_test.go
+++ b/lib/time/duration_test.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
package time
diff --git a/lib/time/scheduler.go b/lib/time/scheduler.go
index b52e1998..2cf67824 100644
--- a/lib/time/scheduler.go
+++ b/lib/time/scheduler.go
@@ -1,6 +1,5 @@
-// Copyright 2023, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2023 Shulhan <ms@kilabit.info>
package time
diff --git a/lib/time/scheduler_example_test.go b/lib/time/scheduler_example_test.go
index 977b54a0..dddf59dd 100644
--- a/lib/time/scheduler_example_test.go
+++ b/lib/time/scheduler_example_test.go
@@ -1,3 +1,6 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2023 M. Shulhan <ms@kilabit.info>
+
package time
import (
diff --git a/lib/time/scheduler_test.go b/lib/time/scheduler_test.go
index 0aeaa080..2526b82a 100644
--- a/lib/time/scheduler_test.go
+++ b/lib/time/scheduler_test.go
@@ -1,6 +1,5 @@
-// Copyright 2023, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2023 Shulhan <ms@kilabit.info>
package time
diff --git a/lib/time/time.go b/lib/time/time.go
index 221b0691..022ac9d7 100644
--- a/lib/time/time.go
+++ b/lib/time/time.go
@@ -1,6 +1,5 @@
-// Copyright 2018, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2018 Shulhan <ms@kilabit.info>
// Package time provide a library for working with time.
package time
diff --git a/lib/time/time_example_test.go b/lib/time/time_example_test.go
index 7060d47c..d540b59e 100644
--- a/lib/time/time_example_test.go
+++ b/lib/time/time_example_test.go
@@ -1,6 +1,5 @@
-// Copyright 2021, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2021 Shulhan <ms@kilabit.info>
package time
diff --git a/lib/time/time_test.go b/lib/time/time_test.go
index 5345bd83..c94dd0b9 100644
--- a/lib/time/time_test.go
+++ b/lib/time/time_test.go
@@ -1,6 +1,5 @@
-// Copyright 2023, Shulhan <ms@kilabit.info>. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2023 Shulhan <ms@kilabit.info>
package time