Revision history for Protobuf 0.12 2026-07-26 - Added SECURITY.md [Ecosystem Hardening & Parity] - Merged Google-Protobuf-WKT into core Protobuf distribution. - Bundled standard Well-Known Types (Timestamp, Any, Descriptor, etc.) directly in lib/Google/Protobuf/. 0.11 Wed Jul 22 2026 [Documentation] - Added missing 0.10 release entry to Changes file (reported by Lukas Mai / @mauke). 0.10 Wed Jul 22 2026 [Core Runtime & Multi-Platform Alignment] - Synchronized $VERSION = '0.11' across all 45 sub-module .pm files to resolve DynaLoader version mismatch errors during XS bootstrapping. - Process ID Tracking: Added getpid() check in xs/descriptor_pool/pool.c to reinitialize generated_pool_ptr across fork() calls, eliminating segfaults and use-after-free conditions in multi-process/forking servers. - RPATH Linker Fix: Single-quoted \$$ORIGIN in Makefile.PL extra_ldflags so make/ld passes literal $ORIGIN to ld.so. - Template Toolkit Integration: Refactored blib_libprotobufperl_copy Makefile rule out of Makefile.PL and into makefile.tt template block. - Test Proto Automation: Added generate_test_protos rule in makefile.tt and untracked static pre-generated t/generated/*.pm files from Git tracking. 0.09 Sat Jul 18 2026 [Compatibility & API Layer] - Added Google::ProtocolBuffers::Dynamic compatibility API shim (Google::ProtocolBuffers::Dynamic) backed by the high-performance upb C engine. - Supported load_file, load_string, map_package, map_message, encode, and decode methods. - Enabled automatic dynamic package mapping and class generation for mapped Perl namespaces. - Added comprehensive compatibility unit test suite (t/025_dynamic_compat.t). - Refactored App::EvalServerAdvanced::Protocol to utilize the new compatibility layer with File::ShareDir path resolution. - Special thanks to Ryan Voots (@simcop2387) for testing, feedback, and driving compatibility requirements for App::EvalServerAdvanced. [Bug Fixes & Smoker Hardening] - Added RT bug tracker URL (https://rt.cpan.org/Dist/Display.html?Queue=Protobuf) to POD documentation across distribution modules. - Fixed non-system perl (perlbrew/plenv/custom prefixes) linking errors caused by hardcoded static libperl.a search paths in Makefile.PL (CPAN RT #180139 & RT #178734 reported by Slaven Rezić / @srezic; with key build insights from Ryan Voots / @simcop2387). - Added -fPIC $Config{cccdlflags} to all C and C++ object compilation rules in Makefile.PL to prevent R_X86_64_TPOFF32 and R_X86_64_PC32 relocation errors under LTO (-flto=auto) and ithread builds (thanks to Lukas Mai / @mauke for catching and debugging). - Added Xcode SDK Perl CORE header search fallback in Makefile.PL for macOS Apple Silicon system Perl builds. 0.08 Sat Jul 18 2026 [CPAN Metadata Correction] - Corrected repository URL to GoogleCloudPlatform/google-auth-library-perl.git and added bugtracker URL in Makefile.PL META_MERGE (thanks to Lukas Mai / @mauke for catching stale metadata). [Build Systems & Clean Target Hardening] - Enhanced Makefile.PL to automatically include bin/protoc-gen-perl-pb in standard Makefile 'all' and 'install' targets via EXE_FILES. - Removed tracked ELF 64-bit binary bin/protoc-gen-perl-pb from Git tracking and added to .gitignore. - Hardened Makefile.PL realclean target to preserve vendor/ C source headers and output object directory paths. - Added git vendor auto-restoration fallback (git checkout -- vendor/) to Makefile.PL when vendor/ directory is missing in a Git workspace. 0.07 Fri Jul 17 2026 [Core Runtime & Descriptor Engine] - Internal release prep and descriptor pool synchronization updates. - Improved upb memory arena lifecycle management and string handling across XS calls. 0.06 Fri Jul 17 2026 [Windows & Multi-Platform Build Hardening] - Enhanced Makefile.PL to search system library paths for libperl across Debian, Ubuntu, Fedora, and Arch layouts. - Hardened protoc/plugin_main.cc on Windows by setting stdin and stdout to binary mode (_setmode O_BINARY), preventing line-ending corruption during protoc IPC. - Sanitized backslashes in compiler include paths (-I) for MinGW and MSWin32 environments. - Overrode MY::fixin in Makefile.PL to prevent script rewriting issues on Windows. [Code Generator & Type System] - Hardened Protobuf::ClassGenerator::_get_type_tiny_code to handle unresolved message type references via capitalized fallback class naming and Any type coercion instead of dying. - Updated protoc-gen-perl-pb (protoc/generator.cc) to emit standard Apache 2.0 copyright headers in generated module headers. [Architecture & CPAN Cleanup] - Streamlined $VERSION declarations: pruned redundant $VERSION variables from generated sub-modules and schema files so CPAN toolchains track versioning exclusively through primary distribution entrypoints. 0.05 Mon Jul 6 2026 [Windows Portability & Build Hardening] - Fixed building and linking of libprotobufperl on Windows (MinGW/Strawberry Perl) by linking with embed_ldflags (containing libperl542.a) and explicitly using .dll extension instead of $Config{dlext} (.xs.dll) for the helper library. - Conditionally bypassed linking with -lpcre2-8 on Windows as PCRE2 is not used in the Windows test suite. - Implemented the missing PerlUpb_Message_GetFingerprint function in the XS layer. - Reordered C test headers to include perl.h before XSUB.h, preventing socket structure and macro redefinition conflicts under MinGW. - Updated Makefile.PL and makefile.tt run targets to use Windows-compatible path separators (backslashes) and environment variable syntax (set PATH=... && command). - Skipped POSIX-specific and unsupported tests on Windows, including ASan leak tests (036_asan_leak_test.c), tmpfs arena allocators, and tmpfs IPC tests. [Documentation] - Updated THANKS.md to thank Subinoy Dutta for exercising and verifying the Windows version. 0.04 Sun Jun 14 2026 [macOS & Windows Portability] - Introduced a header-only C++20 std::string_view alias shim for absl::string_view in the C++ compiler plugin (generator.h, helpers.h), enabling clean compilation on Windows/MSVC without requiring external Abseil binary libraries. - Bypassed Abseil binary library linking ($absl_libs) in Makefile.PL when compiling on Windows. - Added platform detection in Makefile.PL to correctly use the .dylib extension for external libraries on macOS ($extlib_ext = $is_darwin ? 'dylib' : '$(DLEXT)'). - Resolved macOS-specific linker flag conflicts for Abseil string_view by conditionally omitting -labsl_string_view. - Added support for appending .exe to the compiler plugin target in Makefile.PL and corrected the compiler invocation path on Windows. - Hardened thread safety in the XS layer by conditionalizing thread-dependent tests on non-threaded Perl configurations using MULTIPLICITY checks, preventing crashes on Windows and other threaded environments. [Bug Fixes] - Fixed a critical compilation error in Protobuf.xs (XS_Protobuf__Arena__xs_stats) where incorrect thread context passing (aTHX instead of aTHX_) caused syntax errors on single-threaded Perl smoker systems. - Fixed the same thread context bug in t/c/integration/050_convert_coro.c across several conversion functions. - Resolved a dev-mode build block in Makefile.PL by dynamically adjusting the paths of JIT-vendored plugin.upb.c and descriptor.upb.c to use the correct Google3 translated layout (third_party instead of 3rd_party and net/proto2/proto). - Fixed a destructive make clean bug in Makefile.PL by removing the JIT-vendored 'vendor' directory from the clean files map, preserving it as a static asset for CPAN packages and restricting its deletion to realclean. [Critique & Build Hardening] - Bypassed the package-wide CheckAbslTypes linter by excluding third_party/protobuf/perl/... in METADATA. - Resolved a fatal compilation error in Google3 where Abseil's string_view.h could not be found (added a conditional GOOGLE3 include path). - Fixed a bug in Makefile.PL where compiled upb object files (plugin.upb.o and descriptor.upb.o) were left behind after make clean/realclean, triggering ComplianceLint errors. - Resolved several Buildifier and ProtoBestPractices style warnings in BUILD, build_defs.bzl, and c_test_config.bzl. [CPAN & Kwalitee Hardening] - Fixed a critical CPAN version consistency issue by updating the C++ compiler plugin to dynamically generate package versions matching the distribution version (using a C++ preprocessor macro PROTOBUF_PERL_VERSION passed via Makefile.PL). - Resolved CPAN version parsing errors by flattening the compile-time BEGIN blocks in lib/Protobuf.pm into standard, statically-parsable runtime declarations. - Resolved the CPAN no_files_to_be_skipped error by removing the overly broad test executable skip regex from MANIFEST.SKIP. - Added SECURITY.md and CONTRIBUTING.md to the CPAN distribution to resolve Kwalitee documentation warnings. - Added no_index metadata to Makefile.PL to exclude build-time helpers (xlib/, local/, etc.) from CPAN indexing. - Declared MIN_PERL_VERSION => '5.014' in Makefile.PL. 0.03 Sat Jun 14 2026 [Core C/XS Runtime & Conformance] - Added support for ignore_unknown_fields in JSON decoder by propagating options from Perl to C upb_JsonDecode_IgnoreUnknown in serialize.c. - Fixed string encoding bugs by enforcing strict UTF-8 decoding via SvPVutf8 across the C/XS boundary. - Refactored C/XS header files (all_descriptors.h, convert.h, descriptor.h, etc.) to clean up declarations and internal APIs. - Fixed XS compilation scanning in Makefile.PL to include xs/protobuf/utils.c. [Compiler Plugin] - Modularized the C++ compiler plugin (protoc-gen-perl-pb) into plugin_main.cc, generator.cc, and helpers.cc. - Integrated plugin source files into the CPAN distribution under perl/protoc/ (mapped via a development symlink to the root protoc/ directory and packaged as real files). - Fixed C++ plugin linking by running the post-processor on plugin.upb.h and restoring compatibility aliases in generator.h. [Bazel & Build Systems] - Supported hermetic Bazel builds in perl/BUILD by mapping to upb bootstrap targets and integrating hermetic Perl headers. - Defined the perl_proto_c_test macro in build_defs.bzl and consolidated C unit tests into a loop in perl/BUILD, reducing line count by 89%. - Fixed Makefile.PL to use dynamic include paths, supporting both development and clean CPAN installation modes. - Untracked MANIFEST from Git and added it to perl/.gitignore to ensure it is only generated dynamically. - Fixed clean CPAN builds by dynamically creating a monorepo-style import mapping for test_messages_proto2.proto in perl/Makefile.PL, allowing protoc to resolve the import in unpacked tarball environments. [Tests & Quality Assurance] - Updated PurePerl tests (t/028_pureperl_*.t) to use the new package name conventions (protobuf_perl_test instead of test). - Corrected integration tests (299_3_error.t, 299_5_embedded.t) to use standard package nesting. - Verified all 55 test files (259 tests) pass successfully under both local make test and sandboxed cpanm. [Documentation & Community] - Restructured and renamed the architecture and design document suite under perl/doc/, adding IMPLEMENTATION_PLAN.md, OVERVIEW.md, API_DESIGN.md, and XS_CORE_DEEP_DIVE.md. - Updated THANKS.md to show appreciation for the architectural guidance from core developers Leon Timmermans (leont) and Paul Evans (LeoNerd) on #p5p. [Licensing & Dependencies] - Replaced the Apache License 2.0 with the 3-Clause BSD License in perl/LICENSE. - Added JIT-fetch of libcoro during configuration to keep the repository clean of non-Apache code. 0.02 Mon Jun 1 2026 - Reorganized build and packaging to support robust, Bazel-independent CPAN distribution. - Refactored Sideload::Build::FileLists to prune unused upb language bindings (lua, ruby) and dynamically locate xs/ root sources inside unpacked tarballs. - Integrated standard CPAN files (cpanfile, CONFIGURE_REQUIRES, and metadata merges). - Decoupled Protobuf.xs reassembly and vendor synchronization into a maint/ toolset, managed via Makefile.PL dev-automation. - Audited and refactored all XS string processing, replacing SvPV with SvPVbyte and SvPVutf8 for robust unicode and binary safety. - Replaced slow AUTOLOAD accessors in Protobuf::Message with dynamic Moo-injected accessors. - Re-architected XS layer as modular fragments (.xs.part) assembled cleanly into Protobuf.xs at build-time. - Initiated the C++ standalone code generator plugin protoc-gen-perl-pb for Perl class generation. - Consolidated test boilerplate in TestHelpers.pm and backfilled extensive C/XS/Perl unit tests. - Standardized make test dependencies to automatically generate all required binary descriptor sets before running tests. - Hardened concurrency, memory boundaries, and thread safety rails (verified via AddressSanitizer and 10-thread interpreter stress runs). 0.01 Thu Apr 2 2026 - Initial release of the high-performance upb-based implementation. - Support for Core, Descriptors, Messages, Repeated, Maps, and Unknowns. - Integration with Well-Known Types (WKT). - JSON and Text Format support. - Direct Handle IO (binary/JSON) with length-prefixed streaming support. - Hardened AOT generation with Type::Tiny Repeated/Map constraints. - Recursive HashRef coercion for nested message instantiation. - Improved DescriptorPool conflict reporting with file identification. - Exhaustive boundary and overflow validation for all numeric types. - VPP-inspired thread-local arena caching. - SIMD-accelerated name conversion and validation. - Striped mutexes for lock-free object caching. - Transparent Math::BigInt promotion for 64-bit integers.