‹ Reports
The Dispatch

OSS Report: facebook/folly


Facebook Folly Faces Cross-Platform Compatibility Challenges Amidst Active Development

Facebook's Folly, an open-source C++ library designed for high-performance applications, is experiencing significant activity with 245 open issues, highlighting ongoing challenges in cross-platform compatibility and adaptation to new C++ standards.

Recent activities reveal a focus on addressing build failures and compatibility issues across various platforms, particularly with newer C++ standards like C++20 and C++23. Notable issues include build failures related to AsyncSocket, ConcurrentHashMap, and EventBaseAtomicNotificationQueue, suggesting these components may require further testing or refactoring. The development team is actively working on resolving these issues, as evidenced by numerous pull requests targeting performance optimizations and platform-specific fixes.

Recent Activity

Recent issues and pull requests indicate a concerted effort to enhance compatibility and performance. For instance, #2329 addresses a missing header causing build failures, while #2322 tackles deprecated features in C++23. Pull requests such as #2335 reduce thread counts to avoid system limits, and #2305 introduces optimized routines for AArch64 targets.

Development Team Activities (Reverse Chronological Order)

  1. Jay Feldblum (yfeldblum)

    • Refactored tests and improved CancellationToken::merge() performance.
    • Introduced exception formatting in throw_exception.
  2. Gownta

    • Reviewed changes for header fixes and benchmark optimizations.
  3. Alexey Spiridonov

    • Moved README.md for better organization.
    • Enhanced CancellationToken::merge() performance.
  4. Simon Krueger (skrueger)

    • Added support for leading + in str_to_floating_fast_float.
    • Declared Windows file operations in folly::fileops.
  5. Chad Austin (chadaustin)

    • Modified Synchronized::operator-> to prevent accidental locks.
  6. Justin Kim

    • Fixed missing GFlags headers in tests.
  7. Nicholas Ormrod (Gownta)

    • Removed unused experimental headers.
  8. Open Source Bot

    • Conducted automated updates and maintenance.
  9. Paul Cruz (paulcruz74)

    • Added systemd libraries as dependencies.

Of Note

Quantified Reports

Quantify Issues



Recent GitHub Issues Activity

Timespan Opened Closed Comments Labeled Milestones
7 Days 0 2 0 0 0
30 Days 9 3 2 9 1
90 Days 24 21 24 24 1
1 Year 79 78 133 79 1
All Time 1150 905 - - -

Like all software activity quantification, these numbers are imperfect but sometimes useful. Comments, Labels, and Milestones refer to those issues opened in the timespan in question.

Quantify commits



Quantified Commit Activity Over 30 Days

Developer Avatar Branches PRs Commits Files Changes
Facebook Community Bot 1 1/1/0 1 223 9759
Jay Feldblum 1 0/0/0 45 42 1181
Alexey Spiridonov 1 0/0/0 6 14 1151
Cullen Walsh 1 0/0/0 10 150 1109
Nicholas Ormrod 1 0/0/0 18 73 1096
Jon Janzen 2 1/0/1 2 2 486
Kevin Doherty 1 0/0/0 4 7 470
Simon Krueger 1 0/0/0 3 11 301
Alex Hornby 1 1/0/1 11 21 227
Denis Yaroshevskiy 1 1/0/1 4 7 128
Andrii Grynenko 1 0/0/0 2 3 116
Chad Austin 1 0/0/0 1 1 64
Open Source Bot 1 0/0/0 4 2 64
Paul Cruz 1 0/0/0 2 5 63
Giuseppe Ottaviano 1 0/0/0 1 6 49
David Peixotto 1 0/0/0 1 3 46
Jeff Mickey 1 0/0/0 1 2 40
Tiziano Carotti 1 0/0/0 1 2 34
Zale Young 1 0/0/0 1 2 33
Miro Bucko 1 0/0/0 1 2 27
generatedunixname89002005307016 1 0/0/0 2 10 27
TJ Yin 1 0/0/0 1 3 26
Amit Kumar 1 0/0/0 1 2 25
Michael O'Farrell 1 0/0/0 1 4 23
Felix Handte 1 0/0/0 2 3 17
Yuxuan Chen 1 0/0/0 1 3 17
Mikhail Shatalov 1 0/0/0 1 3 13
Sean Warren 1 0/0/0 1 1 7
Jeffrey Igims 1 0/0/0 1 1 5
Nikita Lutsenko 1 0/0/0 1 1 4
Michael van der Westhuizen 1 0/0/0 1 1 3
Nikolay Beloborodov 1 1/0/1 1 1 2
John Weldon 1 1/0/1 1 1 2
Stepan Koltsov 1 0/0/0 1 1 2
Vincent Lee 1 0/0/0 1 1 2
Satish Kumar 1 0/0/0 1 1 2
user Grupo de Sistemas Distribuidos 1 0/0/0 1 2 2
Justin Kim 1 0/0/0 1 1 1
Nhat Minh Le 1 0/0/0 1 1 1
None (jmccl) 0 1/0/0 0 0 0
Darren Greaux (greauxd) 0 1/0/1 0 0 0
Pedro Peixoto (vaavaav) 0 1/0/1 0 0 0
Kan Li (likan999) 0 1/0/1 0 0 0
Thomas P. (tpolasek) 0 1/0/0 0 0 0
Jia Yue Hua (jiayuehua) 0 1/0/0 0 0 0
Lawliet828 (Lawliet828) 0 1/0/0 0 0 0
Arthur O'Dwyer (Quuxplusone) 0 1/0/0 0 0 0
Anonymous (infomaniac777) 0 1/0/0 0 0 0

PRs: created by that dev and opened/merged/closed-unmerged during the period

Detailed Reports

Report On: Fetch issues



Recent Activity Analysis

The Facebook Folly project currently has 245 open issues, indicating a significant level of ongoing activity and potential challenges within the codebase. Recent issues highlight various build failures across different platforms, particularly with C++ standards compliance and memory management concerns. A notable trend is the increasing number of reports related to compatibility with newer compilers and standards, particularly C++20, which may suggest that the library is under pressure to adapt to evolving development environments.

Several issues indicate problems with specific features or components, such as AsyncSocket, ConcurrentHashMap, and EventBaseAtomicNotificationQueue, which could imply that these areas require more robust testing or refactoring. There are also multiple reports of undefined references and build failures on different operating systems, including macOS and FreeBSD, suggesting that cross-platform compatibility remains a challenge.

Issue Details

Recently Created Issues

  1. Issue #2332: Is building with tcmalloc supported?

    • Priority: Medium
    • Status: Open
    • Created: 11 days ago
    • Summary: User reports difficulties using tcmalloc with Folly and inquires about support for building with it.
  2. Issue #2329: Build failure in folly/concurrency/SingletonRelaxedCounter.h

    • Priority: High
    • Status: Open
    • Created: 15 days ago (edited recently)
    • Summary: Missing header for std::unordered_map causing build failures; a PR has been submitted for the fix.
  3. Issue #1474: ninja: build stopped: subcommand failed

    • Priority: High
    • Status: Open
    • Created: 1492 days ago (edited recently)
    • Summary: User experiences build failures across different environments (Windows and Ubuntu) with unclear linker errors.
  4. Issue #2328: BasicTokenBucket thread-safe issue

    • Priority: Medium
    • Status: Open
    • Created: 16 days ago
    • Summary: Discussion on thread safety in the BasicTokenBucket implementation.
  5. Issue #2322: Build fails for C++23 and Libstdc++, missing std::unexpected_handler

    • Priority: High
    • Status: Open
    • Created: 21 days ago
    • Summary: Compatibility issue with C++23 due to deprecated features in Libstdc++.

Recently Updated Issues

  1. Issue #2315: Please help, test failed: The following tests FAILED...

    • Priority: Medium
    • Status: Open
    • Updated: 22 days ago
    • Summary: User seeks assistance after encountering a test failure during setup.
  2. Issue #2312: Coroutine debugging tools

    • Priority: Low
    • Status: Open
    • Updated: 81 days ago
    • Summary: User requests better debugging tools for coroutines.
  3. Issue #2298: Build breaks on the arm64 platform...

    • Priority: High
    • Status: Open
    • Updated: 47 days ago
    • Summary: User reports a build break on ARM64 due to duplicate symbols.
  4. Issue #2295: A problem with VC++ and vcpkg due to setting C++ standard...

    • Priority: Medium
    • Status: Open
    • Updated: 52 days ago
    • Summary: Conflict between vcpkg settings and Folly's C++ standard settings causing build issues.
  5. Issue #2290: F14FastMap release memory

    • Priority: Low
    • Status: Open
    • Updated: 60 days ago
    • Summary: Inquiry about memory management in F14FastMap.

Implications for the Project

The recent activity indicates a pressing need for improved documentation, especially regarding compatibility with new C++ standards and cross-platform builds. The high volume of unresolved issues suggests that contributors may be overwhelmed or that there are systemic problems within certain components of the library, particularly those related to concurrency and memory management.

The presence of multiple issues related to undefined references implies that there may be inconsistencies in how dependencies are managed across different platforms, which could affect user adoption and satisfaction. Addressing these concerns will be crucial for maintaining Folly's reputation as a reliable library for high-performance applications.

Report On: Fetch pull requests



Overview

The analysis of the pull requests (PRs) for the Facebook Folly project reveals a high level of activity and engagement from contributors. The PRs cover a wide range of topics, including bug fixes, feature enhancements, and infrastructure improvements. Notably, there is a focus on maintaining compatibility across different platforms and compilers, as well as addressing performance optimizations.

Summary of Pull Requests

  1. PR #2335: Reduces thread count in ConcurrentHashMapTest to prevent system thread limit breach on certain platforms.
  2. PR #2305: Adds optimized routines for "find first" methods for AArch64 targets that support SVE2.
  3. PR #2327: Resolves thread-safety issues in BasicTokenBucket by ensuring atomic operations on shared variables.
  4. PR #2325: Fixes dependency order for libunwind and liblzma to avoid build issues.
  5. PR #2320: Fixes compilation issues with glog version >= 0.7.
  6. PR #2318: Converts directory fbcode/opensource to use the Ruff formatter.
  7. PR #2314: Fixes a typo in feature-test macro for P1144 trivial relocatability.
  8. PR #2310: Makes dependency on fast_float optional in CMake build to improve compatibility with older distributions.
  9. PR #2286: Fixes definition of FOLLY_ELF_NATIVE_CLASS for non-glibc systems.
  10. PR #2282: Adds missing scaffolding to mcrouter manifest for proper recognition as a Meta first-party project.

Analysis of Pull Requests

The PRs reflect several key themes:

  1. Cross-Platform Compatibility: Many PRs address compatibility issues across different operating systems and compilers (e.g., PRs #2305, #2325, #2320). This highlights the project's commitment to supporting a wide range of environments.

  2. Performance Optimization: Several PRs focus on optimizing performance (e.g., PRs #2305, #2310). These optimizations are crucial for maintaining Folly's reputation as a high-performance library suitable for large-scale applications.

  3. Infrastructure Improvements: PRs like #2318 and #2282 indicate ongoing efforts to improve the project's infrastructure, such as build systems and code formatting standards. These improvements facilitate better development practices and code quality.

  4. Community Engagement: The diverse range of contributors and the variety of changes suggest an active community engaged in enhancing the library's capabilities and addressing its limitations.

  5. Bug Fixes and Maintenance: Regular updates to fix bugs (e.g., PRs #2327, #2320) demonstrate the project's responsiveness to issues reported by users and contributors.

Overall, the analysis shows that Folly is actively maintained with a focus on performance, compatibility, and community involvement, making it a robust choice for developers seeking high-performance C++ libraries.

Report On: Fetch commits



Repo Commits Analysis

Development Team and Recent Activity

Team Members and Their Recent Activities

  1. Simon Krueger (skrueger)

    • Commits: 3
    • Changes: 301 across 11 files
    • Notable Work:
    • Added support for a leading + sign in str_to_floating_fast_float.
    • Declared folly::fileops functions for file operations on Windows.
    • Optimized string to float conversions using the fast_float library.
  2. Jay Feldblum (yfeldblum)

    • Commits: 45
    • Changes: 1181 across 42 files
    • Notable Work:
    • Introduced a variation of throw_exception that formats exceptions.
    • Improved performance of CancellationToken::merge() function.
    • Refactored tests and fixed various issues related to constexpr and MSVC compatibility.
  3. Gownta

    • Commits: 18
    • Changes: 1096 across 73 files
    • Notable Work:
    • Reviewed multiple changes, including fixes for missing headers and optimizations in benchmark measurements.
  4. Alexey Spiridonov

    • Commits: 6
    • Changes: 1151 across 14 files
    • Notable Work:
    • Moved README.md out of experimental directory.
    • Optimized CancellationToken::merge() for better performance.
  5. Chad Austin (chadaustin)

    • Commits: 1
    • Changes: 64 across 1 file
    • Notable Work:
    • Moved Synchronized::operator-> into an ImplicitSynchronized subclass to prevent accidental lock acquisition.
  6. Justin Kim

    • Commits: 1
    • Changes: 1 across 1 file
    • Notable Work:
    • Fixed missing GFlags headers in tests.
  7. Nicholas Ormrod (Gownta)

    • Commits: 1
    • Changes: 27 across 2 files
    • Notable Work:
    • Removed unused experimental headers.
  8. Open Source Bot

    • Commits: 4
    • Changes: 64 across 2 files
    • Notable Work:
    • Automated updates and maintenance tasks.
  9. Paul Cruz (paulcruz74)

    • Commits: 2
    • Changes: 63 across 5 files
    • Notable Work:
    • Added systemd libraries as dependencies.
  10. Others (including contributors like jeffreyigims, ot, etc.)

    • Various contributions focused on fixing bugs, optimizing performance, and maintaining compatibility with different platforms.

Patterns and Themes

  • The development team is highly active, with significant contributions from multiple members, particularly Jay Feldblum, who has the highest number of commits.
  • Recent activities show a strong focus on optimizing performance, particularly in the context of coroutine handling and file operations on Windows.
  • There is a consistent effort to improve code quality through refactoring, fixing bugs, and enhancing test coverage.
  • The team is actively removing deprecated or unused code, indicating a commitment to maintaining a clean codebase.
  • Collaboration among team members is evident through reviews and shared contributions to similar areas of the codebase.

Conclusions

The development team is engaged in continuous improvement of the Folly library, focusing on performance enhancements, code quality, and maintaining compatibility across platforms. The high level of activity suggests a robust development cycle with active collaboration among team members.