wuffs VS rfcs

Compare wuffs vs rfcs and see what are their differences.

WorkOS - The modern identity platform for B2B SaaS
The APIs are flexible and easy-to-use, supporting authentication, user identity, and complex enterprise features like SSO and SCIM provisioning.
workos.com
featured
InfluxDB - Power Real-Time Data Analytics at Scale
Get real-time insights from all types of time series data with InfluxDB. Ingest, query, and analyze billions of data points in real-time with unbounded cardinality.
www.influxdata.com
featured
wuffs rfcs
80 666
3,743 5,700
1.7% 1.4%
9.4 9.8
6 days ago 6 days ago
C Markdown
GNU General Public License v3.0 or later Apache License 2.0
The number of mentions indicates the total number of mentions that we've tracked plus the number of user suggested alternatives.
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.

wuffs

Posts with mentions or reviews of wuffs. We have used some of these posts to build our list of alternatives and similar projects. The last one was on 2024-02-04.
  • Still no love for JPEG XL: Browser maker love-in snubs next-gen image format
    7 projects | news.ycombinator.com | 4 Feb 2024
    Maybe this is what you are looking for:

    https://github.com/google/wuffs

    "Wuffs is a memory-safe programming language (and a standard library written in that language) for Wrangling Untrusted File Formats Safely."

  • 4-year campaign backdoored iPhones using possibly the most advanced exploit
    1 project | news.ycombinator.com | 27 Dec 2023
    It could author its format parsers in https://github.com/google/wuffs, and make them BSD-like open source to maximize adoption.

    An even bigger change: It could allow users to choose their iMessage client freely. Why not open up the protocol? I’m sure a security focused client would be popular and in the grand scheme of things easy to author.

    Perhaps they could open up more of the OS and apps. Perhaps their claims about the security of users and the App Store is kind of BS.

  • Just about every Windows/Linux device vulnerable to new LogoFAIL firmware attack
    4 projects | news.ycombinator.com | 6 Dec 2023
    This is one of the reasons I'm a big fan of wuffs[0] - it specifically targets dealing with formats like pictures, safely, and the result drops in to a C codebase to make the compat/migration story easy.

    [0] https://github.com/google/wuffs

  • Google assigns a CVE for libwebp and gives it a 10.0 score
    5 projects | news.ycombinator.com | 26 Sep 2023
    There are already huffman-decoding and some parts of webp algorithms in https://github.com/google/wuffs (language that finds missing bounds checks during compilations). In contrary, according to readme, this language allows to write more optimized code (compared to C). WEBP decoding is stated as a midterm target in the roadmap.
  • The WebP 0day
    6 projects | news.ycombinator.com | 21 Sep 2023
    Specifically, since performance is crucial for this type of work, it should be written in WUFFS. WUFFS doesn't emit bounds checks (as Java does and as Rust would where it's unclear why something should be in bounds at runtime) it just rejects programs where it can't see why the indexes are in-bounds.

    https://github.com/google/wuffs

    You can explicitly write the same checks and meet this requirement, but chances are since you believe you're producing a high performance piece of software which doesn't need checks you'll instead be pulled up by the fact the WUFFS tooling won't accept your code and discover you got it wrong.

    This is weaker than full blown formal verification, but not for the purpose we care about in program safety, thus a big improvement on humans writing LGTM.

  • What If OpenDocument Used SQLite?
    8 projects | news.ycombinator.com | 18 Sep 2023
    > parsing encoded files tends to introduce vulnerabilities

    If we are talking about binary formats, now there are systematic solutions like https://github.com/google/wuffs that protect against vulnerabilities. But SQLite is not just a format - it's an evolving ecosystem with constantly added features. And the most prominent issue was not even in core, it was in FTS3. What will SQLite add next? More json-related functions? Maybe BSON? It is useful, but does not help in this situation.

    Regarding traces, there are many forensics tools and even books about forensic analysis of SQLite databases. In well-designed format such tools should not exist in the first place. This is hard requirement: if it requires rewriting the whole file - then so be it.

  • CVE-2023-4863: Heap buffer overflow in WebP (Chrome)
    18 projects | news.ycombinator.com | 12 Sep 2023
    I agree that Wuffs [1] would have been a very good alternative! If it can be made more generally. AFAIK Wuffs is still very limited, in particular it never allows dynamic allocation. Many formats, including those supported by Wuffs the library, need dynamic allocation, so Wuffs code has to be glued with unverified non-Wuffs code [2]. This only works with simpler formats.

    [1] https://github.com/google/wuffs/blob/main/doc/wuffs-the-lang...

    [2] https://github.com/google/wuffs/blob/main/doc/note/memory-sa...

  • NSO Group iPhone Zero-Click, Zero-Day Exploit Captured in the Wild
    3 projects | news.ycombinator.com | 7 Sep 2023
    There are efforts to do that, notably https://github.com/google/wuffs

    RLBox is another interesting option that lets you sandbox C/C++ code.

    I think the main reason is that security is one of those things that people don't care about until it is too late to change. They get to the point of having a fast PDF library in C++ that has all the features. Then they realise that they should have written it in a safer language but by that point it means a complete rewrite.

    The same reason not enough people use Bazel. By the time most people realise they need it, you've already implemented a huge build system using Make or whatever.

  • Ask HN: Wuffs Examples for Text Files?
    1 project | news.ycombinator.com | 22 May 2023
    I finally have time to try out wuffs (https://github.com/google/wuffs), which I first heard about here on HN. I want to develop a low-level tokenizer for SDF files, a small-molecule structure file format which started in the 1970s, with lots of, let's call it 'heritage'. Wuffs' ability to process near the data, with a coroutine-like interface, seems like a good fit.

    I got the "hello-wuffs-c" example to work, which took some tinkering (see wuffs issue #24). That reads a single string and returns an unsigned int. Despite looking at the example implementations for json parsing, I can't figure out how to go from that example to something which handles multiple input buffer blocks, with string tokens that might straddle two buffers.

    Nor could I find third-party examples of people using wuffs-the-language beyond basic experimentation for simple binary data. The handful of non-trivial examples I found only used wuffs-the-library, as a vendored component in a larger project.

    The lack of wuffs-the-language use after several years seems a strong sign that I shouldn't look to wuffs for my project. Given the 'workarounds' in #24 are still present after 3 years, it doesn't even seem that widely internally at Google.

    Does anyone here have experience to share, or pointers to related projects?

  • FaaS in Go with WASM, WASI and Rust
    5 projects | news.ycombinator.com | 7 May 2023
    Here's an off-topic answer.

    Depends on what you want your toy language to do and what sort of runtime support you'd like to lean on.

    JVM is pretty good for a lot of script-y languages, does impose overhead of having a JVM around. Provides GC, Threads, Reflection, consistent semantics. Tons of tools, libraries, support.

    WebAssembly is constrained (for running-in-a-browser safety reasons) but then you get to run your code in a browser, or as a service, etc, and Other People are working hard on the problem of getting your WA to go fast. That used to be a big reason for using JVM, but it turns out that Security Is Darn Hard.

    I have used C in the (distant) past as an IL, and that works up to a point, implementing garbage collection can be a pain if that's a thing that you want. C compilers have had a lot of work on them over the years, and you also have access to some low-level stuff, so if you were E.G. trying to come up with a little language that had super-good performance, C might be a good choice. (See also, [Wuffs](https://github.com/google/wuffs), by Nigel Tao et al at Google).

    A suggestion, if you do target C -- don't work too hard to find isomorphisms between C's data structures and YourToyLang's data structures. Back around 1990, I did my C-generating compiler for Modula-3, and a friend at Xerox PARC used C as a target for Cedar Mesa, and Hans used it in a lower-level way (so I was mapping between M-3 records and C structs, for example, Hans was not) and the lower-level way worked better -- i.e., I chose poorly. It worked, but lower-level worked better.

    If you are targeting a higher-level language, Rust and Go both seem like interesting options to me. Both have the disadvantage that they are still changing slightly but you get interesting "services" from the underlying VM -- for Rust, the borrow checker, plus libraries, for Go, reflection, goroutines, and the GC, plus libraries.

    Rust should get you slightly higher performance, but I'd worry that you couldn't hide the existence of the borrow checker from your toy language, especially if you wanted to interact with Rust libraries from YTL. If you wanted to learn something vaguely publishable/wider-interesting, that question right there ("can I compile a TL to Rust, touch the Rust libraries, and not expose the borrow checker? No+what-I-tried/Yes+this-worked") is not bad.

    I have a minor conflict of interest suggesting Go; I work on Go, usually on the compiler, and machine-generated code makes great test data. But regarded as a VM, I am a little puzzled why it hasn't seen wider use, because the GC is great (for lower-allocation rates than Java however; JVM GC has higher throughout efficiency, but Go has tagless objects, interior pointer support, and tiny pause times. Go-the-language makes it pretty easy to allocate less.) Things Go-as-a-VM currently lacks:

    - tail call elimination (JVM same)

rfcs

Posts with mentions or reviews of rfcs. We have used some of these posts to build our list of alternatives and similar projects. The last one was on 2024-02-25.
  • Ask HN: What April Fools jokes have you noticed this year?
    1 project | news.ycombinator.com | 1 Apr 2024
    RFC: Add large language models to Rust

    https://github.com/rust-lang/rfcs/pull/3603

  • Rust to add large language models to the standard library
    1 project | news.ycombinator.com | 1 Apr 2024
  • Why does Rust choose not to provide `for` comprehensions?
    1 project | news.ycombinator.com | 11 Mar 2024
    Man, SO and family has really gone downhill. That top answer is absolutely terrible. In fact, if you care, you can literally look at the RFC discussion here to see the actual debate: https://github.com/rust-lang/rfcs/pull/582

    Basically, `for x in y` is kind of redundant, already sorta-kinda supported by itertools, and there's also a ton of macros that sorta-kinda do it already. It would just be language bloat at this point.

    Literally has nothing to do with memory management.

  • Coroutines in C
    4 projects | news.ycombinator.com | 25 Feb 2024
  • Uv: Python Packaging in Rust
    9 projects | news.ycombinator.com | 15 Feb 2024
    Congrats!

    > Similarly, uv does not yet generate a platform-agnostic lockfile. This matches pip-tools, but differs from Poetry and PDM, making uv a better fit for projects built around the pip and pip-tools workflows.

    Do you expect to make the higher level workflow independent of requirements.txt / support a platform-agnostic lockfile? Being attached to Rye makes me think "no".

    Without being platform agnostic, to me this is dead-on-arrival and unable to meet the "Cargo for Python" aim.

    > uv supports alternate resolution strategies. By default, uv follows the standard Python dependency resolution strategy of preferring the latest compatible version of each package. But by passing --resolution=lowest, library authors can test their packages against the lowest-compatible version of their dependencies. (This is similar to Go's Minimal version selection.)

    > uv allows for resolutions against arbitrary target Python versions. While pip and pip-tools always resolve against the currently-installed Python version (generating, e.g., a Python 3.12-compatible resolution when running under Python 3.12), uv accepts a --python-version parameter, enabling you to generate, e.g., Python 3.7-compatible resolutions even when running under newer versions.

    This is great to see though!

    I can understand it being a flag on these lower level, directly invoked dependency resolution operations.

    While you aren't onto the higher level operations yet, I think it'd be useful to see if there is any cross-ecosystem learning we can do for my MSRV RFC: https://github.com/rust-lang/rfcs/pull/3537

    How are you handling pre-releases in you resolution? Unsure how much of that is specified in PEPs. Its something that Cargo is weak in today but we're slowly improving.

  • RFC: Rust Has Provenance
    3 projects | news.ycombinator.com | 31 Jan 2024
  • The bane of my existence: Supporting both async and sync code in Rust
    4 projects | news.ycombinator.com | 19 Jan 2024
    In the early days of Rust there was a debate about whether to support "green threads" and in doing that require runtime support. It was actually implemented and included for a time but it creates problems when trying to do library or embedded code. At the time Go for example chose to go that route, and it was both nice (goroutines are nice to write and well supported) and expensive (effectively requires GC etc). I don't remember the details but there is a Rust RFC from when they removed green threads:

    https://github.com/rust-lang/rfcs/blob/0806be4f282144cfcd55b...

  • Why stdout is faster than stderr?
    2 projects | news.ycombinator.com | 10 Jan 2024
    I did some more digging. By RFC 899, I believe Alex Crichton meant PR 899 in this repo:

    https://github.com/rust-lang/rfcs/pull/899

    Still, no real discussion of why unbuffered stderr.

  • Go: What We Got Right, What We Got Wrong
    22 projects | news.ycombinator.com | 4 Jan 2024
  • Ask HN: What's the fastest programming language with a large standard library?
    9 projects | news.ycombinator.com | 26 Dec 2023
    Rust has had a stable SIMD vector API[1] for a long time. But, it's architecture specific. The portable API[2] isn't stable yet, but you probably can't use the portable API for some of the more exotic uses of SIMD anyway. Indeed, that's true in .NET's case too[3].

    Rust does all this SIMD too. It just isn't in the standard library. But the regex crate does it. Indeed, this is where .NET got its SIMD approach for multiple substring search from in the first place[4]. ;-)

    You're right that Rust's standard library is conservatively vectorized though[5]. The main thing blocking this isn't the lack of SIMD availability. It's more about how the standard library is internally structured, and the fact that things like substring search are not actually defined in `std` directly, but rather, in `core`. There are plans to fix this[6].

    [1]: https://doc.rust-lang.org/std/arch/index.html

    [2]: https://doc.rust-lang.org/std/simd/index.html

    [3]: https://github.com/dotnet/runtime/blob/72fae0073b35a404f03c3...

    [4]: https://github.com/dotnet/runtime/pull/88394#issuecomment-16...

    [5]: https://github.com/BurntSushi/memchr#why-is-the-standard-lib...

    [6]: https://github.com/rust-lang/rfcs/pull/3469

What are some alternatives?

When comparing wuffs and rfcs you can also consider the following projects:

png-decoder - A pure-Rust, no_std compatible PNG decoder

rust - Empowering everyone to build reliable and efficient software.

stb - stb single-file public domain libraries for C/C++

bubblewrap - Low-level unprivileged sandboxing tool used by Flatpak and similar projects

csharplang - The official repo for the design of the C# programming language

crates.io - The Rust package registry

image-png - PNG decoding and encoding library in pure Rust

polonius - Defines the Rust borrow checker.

highway - Performance-portable, length-agnostic SIMD with runtime dispatch

Rust-for-Linux - Adding support for the Rust language to the Linux kernel.

kandria - A post-apocalyptic actionRPG. Now on Steam!

rust-gc - Simple tracing (mark and sweep) garbage collector for Rust