Giving up upstream-ing my patches and feel free to pick them up
mail.openjdk.org
mail.openjdk.org
> For each of my emails, I got a reply, saying that they "sincerely apologize" and "@Dalibor Topic Can you please review...", with no actual progress being made.
then
> Sorry to hear this. .... @Dalibor Topic <dalibor.topic at oracle.com>, can we get this prioritized?
This is pretty morbidly funny.
Next sentence is: I don't fear to not get my money, but currently I don't know if you pay or someone else...
were you trying to use `for(time_duration_t)` ?
Reading other comments on this thread it seems like the mood has shifted. Now there seems to be an expectation that Open Source means "you should promptly review and accept my changes".
There is much wailing that corporates (who, by the way, never used to release code at all) are somehow at fault for either existing, or not responding quick enough or requiring paperwork(!).
I'm not sure when pushing code upstream to Open Source became an entitlement. I'm pretty sure it wasn't there at the beginning and it's nor part if any license I'm aware of.
And as I got older, I realized "I am not the customer, there is no money in responding to me, I am a net negative cost to your business".
And uhh... I'll shuffle the F out now then? And try and catch-up on 200 years of math.
I don't think anything has changed IRL, aside from my knees hurting
It's my tailbone and an old torn back injury; I can't sit or stand for longer than 2 hours and I think I need to swap my Aeron classic size B for a C.
And it's a completely standard situation for non-corporate open source software, too. OpenSSH, for instance, has OpenBSD-specific dependencies and can only be run on Linux because of the porting efforts by a separate group of volunteers.
Sure, it'd be event better if they went out of their way to facilitate external participation, but they don't have to. Not even GNU does so for everything they publish!
You're conflating the differing treatment of projects where there is much investment and community usability like react, ones that are half-assed like edenfs, and the zillions of others that aren't even explained clearly what they do or what they're for.
> anyone is free to step up and mke [sic] sure that it builds
On thrown-over-the-wall projects, there's too many inside-baseball gotchas and little/no documentation. Effort by others are generally unrealistic and a waste of time that won't be merged since there are rules and limitations for community contributions. The vast majority of tiny and obscure projects, MAANG code is useless to average people working on average problems because the burden to make it work is as much or more than reinventing it themselves.
> or that internal dependencies are replaced.
This is hand-waving away reality. No average engineer for reasonable effort is going to be able to reproduce an undocumented API for unreleased kernel extensions/FUSE/etc. for Mac, Windows, and Linux to make edenfs work.
Another case in point: Hack. No documentation and no portable build instructions/toolchain.
React and react native are in a different class where there is meaningful community participation and investment. Whereas hack, edenfs, and chef cookbooks is/was mostly thrown-over-the-wall stuff. There are a few projects in the middle like watchman that update code using an opaque internal->external export process without a whole lot of documentation or clear changelogs, but it's still semi-useful.
The spirit of FOSS is cheapened by flooding the zone with too much stuff on the side of crap. It's better to release less stuff that's well-supported with meaningful community engagement rather than create noise. But if you're fine with a blizzard of noise that isn't useful to anyone else, that's cool for you. Everyone is free to do what they want to do, even if it's trying to make partially-released stuff work when it would've been faster to rewrite from scratch.
Lots of people have to think about “just because you did the work, doesn’t mean it’s valuable for someone else”.
And if you're comparing where we're at now, culturally, with where we were at in the early days of the internet - John Postel, the RFC process, the guys building up the early protocols, running DNS and all that - there's been a different kind of shift.
The way I look at it is, a lot of us hackers (the category I'd put myself in), academics, and hardcore engineers who worked in industry but didn't give a damn about anything except doing solid work other people could rely on - we built up the modern tech stack, and then industry jumped to it as a cost cutting measure and it's been downhill from there.
And this puts us all in a real bind when the critical infrastructure we all rely on is dominated by a few corporate giants who still have the mindset that they want to own everything, and they only pay lip service to the community and even getting bug fixes in if it's something they don't care about is a problem.
This mindset invading the Linux kernel is a huge part of the reasons for the bcachefs split, btw. We had a prominent filesystem maintainer recently talking openly about how they'll only fix bugs if they feel like it or as a part of a quid pro quo with another established player - and that's just not OK. Open source is used by the entire world, not just Google/IBM/Facebook/Amazon.
"How we manage critical infrastructure as a commons - responsibly" needs to be part of the conversation.
So, if you think a project is too corporate, then fork it.
It might have been better if Oracle just said "we don't have the bandwidth to handle open source and we don't want to waste your time, please submit your patches to this other fork and we will merge when we get around to it."
Yes, lots of projects big and small accept contributions. And lots do not. You might think that's good or bad, but it's unrelated to open source.
You are free to submit patches to whatever fork you prefer. If oracle don't suit you then submit somewhere else.
They. Owe. You. Nothing.
If they didn't want his patches, they could have just said so, rather than stringing him along.
CLAs are a cancer.
https://mail.openjdk.org/pipermail/hotspot-dev/2026-January/...
https://mail.openjdk.org/pipermail/hotspot-dev/2026-January/...
My suspicion is that you get ghosted if you don’t have a @google or @redhat email address and really the only way to become a contributor is to be buddies with someone who works on the project already.
I have considered going to one of the CNCF committee meetings and being like, hey you guys are not accepting new contributions which goes against your mandate. But in the end I just maintain local patches that don’t get upstreamed which is easier.
Kubernetes is such a huge project that there are few reviewers who would feel comfortable signing off an an arbitrary PR in a part of the codebase they are not very familiar with.
It's more like Linux, where you need to find the working group (Kubernetes SIG) who would be a good sponsor for a patch, and they can then assign a good reviewer.
(This is true even if you work for Google or Red Hat)
For my etcd changes I did submit to the correct SIG, but nobody reviewed it.
You could analyze the repo to identify others who have modified the same files. and reach out to them specifically.
I get that the current system isn't working, but I don't think you should just go emailing random committers, that seems likely to just piss people off to no benefit.
My experience of the few patches I have received though is they are 100% without exception, bad patches. Bad in that, without me putting an hour or 2 of work into them I can't just accept them. The most common case is no tests. The patch fixes an issue, but the issue exists because there was no test for the case the patch is fixing. So, to accept the PR, I have to download it and spend time writing a test.
Other common experiences are bad coding practices and non-matching styles so I have two choices
(1) spend 30-60 minutes downloading the patch, fixing these issues myself
(2) spend 40-60 minutes adding comments to try to get the person who posted the PR to make their patch acceptable (40-60 mins includes the back and forth).
More often than not, (2) never gets a response. The contributor's POV is they provided a fix and I should be happy to take it as is. I get that. At a certain level they are correct. But, these projects are hobby projects and I have limited time. So I generally don't do (2) because if they ignore the comments then it's wasted time, and (1) has the hurdle that I need to take an hour out to deal with it.
Companies such as Google have billions at their disposal yet still can’t figure out simple project management?
Google of the past is no more, unfortunately.
Trust me I tried many many times.
This has nothing to do with Google being evil it’s just one of the realities of maintaining a big open source project.
Open Source projects are typically done by people who like coding. Writing docs, reviewing PRs, "management" are all chores, not fun parts of the project.
I manage a couple of projects that get submissions. Handling that is really not the fun part of my day. Fortunately I get very few. I can understand why ones that get a lot see it as a burden, not as the great gift the submitter thinks it is.
Personally I don't want to spend hours each day reviewing PRs. That's not what I signed up for.
Nonmatching styles can be mostly solved with linting and static analysis
There’s no fix for bad code outside of manual review beyond that. But doing those things should significantly cut down on your noise.
90% of contributors won’t read it at all or only some parts of it and ignore the rest.
Most PRs you get solve some super specific individual problem and aren’t relevant for the wider community that uses your OSS.
It’s not their fault really but most contributions are so bad it doesn’t serve to spend any time on reviewing them earnestly.
(Been maintaining several popular projects for the last 7 years)
Edit: https://judahmeek.com/p/we-need-frogs-to-defend-foss may be the better link to start with.
In my case there is a monetised proprietary “enterprise” edition of the projects available. Contributions only get accepted if they fit into the commercial roadmap, which is shaped by the (paying) customer needs.
It’s not perfect but the OSS “community” edition is still usable and valuable to many
Examples, calculating something twice instead of pulling the calculation out of the loop (one case) or into a separate function so that 2 separated places where it's calculated don't get out of sync (a different case). Another might be using an let x; if (cond) x = v1 else x = v2 (which is 3-9 lines depending on your brace style) vs const x = cond ? v1 : v2. When v1 and v2 are relatively simple expressons. I haven't seen a checker that will find stuff like this.
Only syntactical styles. Style also include things like how I want errors to be propagated, how failures are to be handled, etc.
I say almost exactly the same thing about agent changes, but the impression I get from people heavily using agents is that they are plenty more flexible about what the code looks like than I am.
I am starting to suspect that it is a personal failing of mine to require that all my code looks consistent within a single project.
Linters can't catch most things that are not syntax-style; i.e. linters can't catch semantic style.
Here is code CC generated this morning for me:
size_t bvks_tls_read (bvks_tls_t *tls, void *dst, size_t dst_len)
{
int ret = wolfSSL_read (tls->ssl, dst, (int)dst_len);
if (ret > 0)
return (size_t)ret;
if (ret == 0)
return 0;
// ret < 0, error case
int err = wolfSSL_get_error (tls->ssl, ret);
switch (err) {
case WOLFSSL_ERROR_WANT_READ:
case WOLFSSL_ERROR_WANT_WRITE:
errno = EAGAIN;
break;
case WOLFSSL_ERROR_SYSCALL:
// errno already set by the underlying socket call
break;
default:
errno = EPROTO;
break;
}
return (size_t)-1;
}
size_t bvks_tls_write (bvks_tls_t *tls, const void *src, size_t src_len)
{
int ret = wolfSSL_write (tls->ssl, src, (int)src_len);
if (ret > 0)
return (size_t)ret;
if (ret == 0)
return 0;
// ret < 0, error case
int err = wolfSSL_get_error (tls->ssl, ret);
switch (err) {
case WOLFSSL_ERROR_WANT_READ:
case WOLFSSL_ERROR_WANT_WRITE:
errno = EAGAIN;
break;
case WOLFSSL_ERROR_SYSCALL:
// errno already set by the underlying socket call
break;
default:
errno = EPROTO;
break;
}
return (size_t)-1;
}
Here is my preferred style: typedef int (tls_op_func_t) (WOLFSSL *, void *, int);
static size_t tls_op (WOLFSSL *ssl, tls_op_func_t *fptr,
void *buf, size_t len)
{
if (len > INT_MAX) {
errno = EINVAL;
return (size_t)-1;
}
int wbytes = fptr (ssl, buf, (int)len);
if (wbytes >= 0)
return (size_t)wbytes;
errno = map_wolf_error (wolfSSL_get_error (ssl, wbytes));
return (size_t)-1;
}
size_t bvks_tls_read (bvks_tls_t *tls, void *dst, size_t dst_len)
{
return tls_op (tls->ssl, wolfSSL_read, dst, dst_len);
}
size_t bvks_tls_write (bvks_tls_t *tls, const void *src, size_t src_len)
{
return tls_op (tls->ssl, (tls_op_func_t *)wolfSSL_write, (void *)src, src_len);
}
One of those is both hard to maintain and has precision (and potential overflow) bugs.The other isolates the potentially buggy behaviour, validates it, and ensures that future changes to fix size_t/int precision loss bugs only has to be done in a single spot.
No linter is catching that style. It's more "coding style" than "syntax style".
Yes there is a lot of garbage out there, but for the people who are actually trying to fix issues it is impossible without an insider within the project.
https://github.com/google/flatbuffers/pull/8252
Flatbuffers Lua implementation has basic fundamental flaws, couldn't even get an "idc" on their Discord
Sorry to say this, but this is natural. Writing patches is easy. Reviewing them is hard. Writing patches (and getting them accepted, merged) is rewarding and demonstrable (as a form of achievement). Reviewing patches, educating new contributors is sometimes rewarding, sometimes not (it's an investment into humans that sometimes pays off, sometimes doesn't), but mostly not a demonstrable achievement in either case. Therefore there is incentive to contribute, and hardly any incentive to review. This is why reviewers are extremely scarce in all open source projects, and why all sustainable projects optimize for reviewer/maintainer satisfaction, not for contributor satisfaction. As an external contributor, you just don't get to allocate scarce resources financed by some commercial entity with no relation to you.
If you want to become a maintainer, or at least want others to review your stuff, don't start by writing code. Start by reading code, and make attempts at reviewing code for others. Assuming you get good at it, established project members should start appreciating it, and might ask you to implement some stuff, which they could be willing to review for you. You first need to give the real kind of effort before you can take it.
And this is why "open development" is a total myth today. Resource allocation and work (chore) distribution are aspects of reality that completely break the wide-eyed, bushy-tailed "new contributors welcome" PR message. Opening up the source code (under whatever license) is one thing, collaborating with randos is an entirely different thing. Can you plan with them in advance? Do they adhere to your deadlines? Can you rely on them when things break? When there are regressions?
> you get ghosted if you don’t have a @google or @redhat email address and really the only way to become a contributor is to be buddies with someone who works on the project already
Yes, and the way to become buddies is to help them out where they are hurting: in their infinite patch review backlogs. Of course, that means you have to invest a whole lot of seemingly thankless learning, for the long run's sake. You have to become an expert with effectively nothing to show for it in the git history. It's totally fair not wanting to do that. Just understand that a ticket that remains open indefinitely, or an uncalled-for contribution that never gets reviewed and merged, may genuinely be better for the maintainers than taking on yet more responsibility for your one-off code contribution.
> I have considered going to one of the CNCF committee meetings and being like, hey you guys are not accepting new contributions which goes against your mandate
According to the above, I bet that "mandate" is a total fake; a PR move only. It does not reflect the actual interests of the organizations with the $$$, which is why it doesn't get followed.
You are right that those orgs should at least be honest and own up to NOT welcoming newcomers or external contributors.
"AI for me, not for thee" kind of thing.
This is precisely what many of us have been repeating incessantly, for ages now. AI is boosting the wrong part of the ecosystem. It only makes the existent bottlenecks more painful.
Many maintainers get exhausted by code reviews, and recharge themselves through coding. The latter is what AI takes away. It demotes engineers to "AI slop reviewers". I don't know why anybody would sign up for that; IMO it leads to immediate burnout.
The CNCF is a registered non-profit and they have a legal duty to fulfill their mandate.
Like I said, it isn’t worth my time fighting this, I just keep local patches now. Etcd is such a dead project that my patches almost never have had conflicts with new releases, because nothing actually changes in etcd because they don’t facilitate external contributors.
That's broadly the point of CLAs, but for a beefy project like OpenJDK with so much shared code baked deep into enterprise deployment, Oracle will feel it's critical they can pull freely given code into the depths of their closed Java builds.
It's their project. It does absolutely block contributions (employers are unhappy sacrificing their engineering output to Oracle). If you don't like it, fork it.
Personally I just use the OpenJDK builds provided by my linux distro and never give it a second thought.
[1]: And so far, Oracle haven't shown much, if any, propensity for abusing their control of Java. There's a process and they seem to mostly stick to it.
Oracle might only accept upstream contributions but OpenJDK is GPL2, so anyone can host their fork of OpenJDK with whatever GPL2-licensed patches they like, regardless of the OCA/CLA being signed. Indeed there are enough distributions of OpenJDK that there's a site for picking which is best for you. I can't really speak to how current that information is, or how good it is, but it exists: https://whichjdk.com/
But yes, you might be right to be suspect of Java as a whole if this is how they treat contributors.
It's worth noting that many larger open source projects have contributor agreements to strengthen their rights for redistribution that a standard license might not cover. What if they want to change the license? They don't want to be hamstrung by a million contributions. Moral rights are something you often see. And severability might also be a concern. Some like the OCA are worse than others. The Python one is pretty good because it limits any future relicensing to open source. https://www.python.org/psf/contrib/contrib-form/
This was more of an unfortunate lack of attention/prioritization.
Don't assume malice where a simpler explanation exists.
So they create draconian "agreements" and "codes" to tilt the playing field entirely in their favor. It's entirely antithetical to the whole idea of open source.
These projects should be ruthlessly forked and all corporate development efforts ignored.
There's absolutely nothing in the "idea of Open Source" that suggests upstream has to accept contributions. Open Source allows you to tinker with the code, not force your changes on others.
Equally you are welcome to not sign anything you font want to sign. There are reasons for those docs, there are reasons to not sign them. It's completely your choice.
And of course you are free to fork anything anytime you like. You're even free to encourage others. So no beef there.
I presume you have at least followed your in principles here? I'm guessing you have forked Linux, and your browser, and your favorite language? And office suite? Posting links here would likely attract others who object to corporate development joining you.
Which is why I said they should be forked. There's nothing that suggests "upstream" has any actual significance.
> I presume you have at least followed your in principles here?
Yes. Thanks for asking. I appreciate questions in good faith.
> I'm guessing you have forked Linux, and your browser, and your favorite language?
Hmm.. do I have to sign an agreement to contribute to those? I'm not sure I have. Is this actually comparable?
> Posting links here would likely attract others who object to corporate development joining you.
That's sweet of you.
Please do and show that it can be sustainable. It’s easy to complain at home. It’s hard to actually keep it going.
Did I accidentally leave "hacker" news?
Or is this "hope to get a job in the valley" news? Apparently the best way to do this is become a rank bully and operate in bad faith wherever possible. I'm glad I left when I did.
No, just that you're just complaining for the sake of it.
> I'm glad I left when I did.
How were you able to read and reply?
Many projects behave this way, particularly those with corporate overlords. At best, it will take weeks to get a simple patch reviewed. By then, I have moved on, at least with my intention to send anything upstream. I commend the author for giving them a whole year, but I have found that is best a recipe for disappointment.
Maintainers: how you react to patches and PRs significantly influence whether or not you get skilled contributors. When I was maintaining such projects, I always tried to reply within 24 hours to new contributors.
It would be interesting to see how quickly the retention rate drops off as the time to review/accept patches goes up. I imagine it looks like an exponential drop off.
They will ignore a big patch from a rando and obviously process a big patch from themselves.
You can become somehwere in between and no longer be a rando, but have to start from the rando end.
I submitted a patch to Go once, and never got anything resembling a response. Told me that Go is more or less completely inaccessible; I should treat it as a Google product rather than a FOSS project I can contribute to. The Go standard library documentation bug I submitted a fix to still exists to this day.
One time I was interested in contributing to an important part of some project, a part where they were nowhere and in dire need of help. As a first try I submitted a small patch correcting the README's build instructions, which were obviously wrong in one place. I got a lot of attitude and hostility, and they refused to accept the fix. Yeah, bye.
Wait what? Source on this? GRUB is supposed to be a GNU Project, I would've thought they'd rather die than accept any sort of Oracle ownership of it.
I know first-hand the frustration of having PRs ignored and it can be quite demoralizing, so I do feel for the author. It sounds like the author is getting to a place of peace with it, and my advice from having been down that path before is to do exactly that, and find something else interesting to hack on.
Having said that, I would never contribute to a project with a first contributor experience like this one.
> perfect for first contributions, especially to get through the myriad of bots requesting you to sign/review stuff
At the same time as they
> can often end up taking more time away from contributing engineers doing reviews and testing than they are worth
https://mail.openjdk.org/pipermail/hotspot-dev/2026-January/...
(So his ping "any progress?" apparently fell on the wrong ears, if he wasn't told he had to submit a new application with something corrected...)
The process was much more involved than anything I'd previously signed, and it was slow, but in my case eventually got approved.
It mostly involved some emails with an actual human and PDF's to be docu-signed.
OpenJDK: where Java is developed
Temurin / Zulu: where OpenJDK is built, tested, packaged, and supportedNever forget: One Rich Asshole Called Larry Ellison still runs this company.
The smaller a project, the more willing an author is to write the entire feature for you based on a plain request.
Go help smaller projects, the big ones don't care that you've submitted any work at all.
By my reading, it's not merely that the standard doesn't require the "d" suffix, it's that the standard doesn't allow the "d" suffix, and the code won't compile on anything but gcc.
1. Is "anything but gcc" actually supported by the project? Do they have a goal of supporting other compilers or possibly an explicit decision not to support other compilers?
2. If they do support other compilers, how did the "d" suffix make it in the first place? That's something I would expect the dev or CI to catch pretty quickly.
3. Does gcc behave any differently with the "d" suffix not there? (I would think a core dev would know that off the top of their head, so it's possible they looked at it and decided it wasn't worth it. One would hope they'd comment on the PR though if they did that). If it does, this could introduce a really hard-to-track-down bug.
I'm not defending Oracle here (in fact I hate Oracle and think they are a scourge on humanity) but trying to approach this with an objective look.
A project should take on useful small patches, thats how you onboard contributors.
I absolutely get that it was an unfortunate interaction from the email writer's perspective, and it's really unfortunate.
But there are a lot of concerns/bureaucracy, etc in case of large projects like this. It may just never got to the person responsible, because it is a cross-cutting concern (so no clear way to assign it to someone) with a low priority.
My initial comment was maybe unfair but I can completely sympathise with the maintainers etc. that separately these PRs look like random small edits (e.g. from a linter) with no specific goal
If it's such a massively huge project like OpenJDK, then not really.
You might also check how non-trivial it is to get a change into the Linux kernel.