<turbo-stream action="append" target="posts_list"><template>    <div class="postbit" id="379667" data-post-id="379667">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="dewetblomerus" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/dewetblomerus/120/27370_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  dewetblomerus
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Something people often miss is that programmer productivity is the <span class="hashtag-raw">#1</span> priority for most software projects, which is why Ruby or Elixir could frequently be the best tool for a particular job, as long as the technical merits are “good enough”.</p>
<p>Of course, we could argue if a language that immediately seems more straightforward to read &amp; write to newcomers because of its ergonomics will continue to provide productivity gains after someone has become an expert in it.</p>
<p>I think a strong case can be made for Ruby or Elixir enabling long-term productivity, though it’s probably weaker for larger Ruby projects.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="379667" data-batch-url="/posts/batch_likers">
                        4
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/why-so-serious/73559/32">Post #31</a>
	                </div>
	            </div>
              <div id="likers-container-379667" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="379667"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #31"></div>
  </section>
</div>
    <div class="postbit" id="379670" data-post-id="379670">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="garrison" src="/assets/icons/user-9f439610.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  garrison
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I really don’t know much about formal methods, but I am quite sure they <em>are</em> useful as a first-pass to prove the correctness of a design and so on. In my case I’m not <em>really</em> designing protocols myself, so this is not as much of a factor. My consensus is VSR, my core architecture is FDB, and so on. I have been deviating but not <em>that much</em>. Since the correctness of the designs I’ve implemented is <em>mostly</em> established already, bugs in the implementation are my main concern.</p>
<p>It’s also worth noting that simulation isn’t enough either. There can always be bugs outside the simulator; that’s why the goal is to minimize the “not simulated” surface as much as possible. But there will always be blind spots, which is why <a href="https://tigerbeetle.com/blog/2025-06-06-fuzzer-blind-spots-meet-jepsen/" rel="noopener nofollow ugc">Aphyr still managed to find correctness bugs in Tigerbeetle</a> despite their <em>extremely</em> thorough and aggressive testing. As it turns out, there really is no substitute for paying a seasoned professional to spend every waking moment trying to break your database for 6 months.</p>
<p>I’m curious: what sorts of things have you used TLA for in a professional setting? Sounds very cool.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="379670" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/why-so-serious/73559/33">Post #32</a>
	                </div>
	            </div>
              <div id="likers-container-379670" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="379670"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #32"></div>
  </section>
</div>
    <div class="postbit" id="379672" data-post-id="379672">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="garrison" src="/assets/icons/user-9f439610.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  garrison
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>What’s the advantage of using Rust there? Or rather, how much (memory) bug surface is there in the NIF that Rust covers? I really have no idea what it takes to wrap SQLite in a NIF but I assume there’s a decent amount of glue needed, and that’s the Rust part?</p>
<p>Misleading error messages are always fun. The best part about trying to write zero-dependency code is that all of the stuff I used to be able to blame on other people is now <em>my</em> fault…</p>
<aside class="quote no-group" data-username="dimitarvp" data-post="31" data-topic="73559">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/dimitarvp/48/38664_2.png" class="avatar"> dimitarvp:</div>
<blockquote>
<p>It’s a Ph.D. activity to even find what you need in this space these days</p>
</blockquote>
</aside>
<p>It is, and that’s what I was getting at yesterday! At this point I would not touch anything distributed or database-shaped unless the team behind it is <em>serious</em> about simulation testing and correctness. Anything less will be 100% loaded with these bugs. And if they show even the slightest indignation after being shown a correctness bug, run <em>far away</em>.</p>
<aside class="quote no-group" data-username="dimitarvp" data-post="31" data-topic="73559">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/dimitarvp/48/38664_2.png" class="avatar"> dimitarvp:</div>
<blockquote>
<p>Any recommendation on a persistent queue with good guarantees without too much sysadmin / devops pain?</p>
</blockquote>
</aside>
<p>Shove your rows into FoundationDB (with a versionstamped key) and never worry about this again. <a class="mention" href="/u/jstimps" rel="nofollow">@jstimps</a> has literally <a href="https://hexdocs.pm/erlfdb/kv_queue.html" rel="noopener nofollow ugc">already done all of the work for you</a>! <img src="https://forum.elixirforum.com/images/emoji/apple/slight_smile.png?v=15" title=":slight_smile:" class="emoji" alt=":slight_smile:" loading="lazy" width="20" height="20"></p>
<p>The only problem with FDB is accessibility. Their docs suck and they don’t care because they are a 3 trillion dollar company and it Works For Them. I can’t get upset, though, because they gave me the code and that’s all I needed!</p>
<p>I hope that Hobbes will solve the accessibility problem more than anything.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="379672" data-batch-url="/posts/batch_likers">
                        2
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/why-so-serious/73559/34">Post #33</a>
	                </div>
	            </div>
              <div id="likers-container-379672" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="379672"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #33"></div>
  </section>
</div>
    <div class="postbit" id="379673" data-post-id="379673">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="dimitarvp" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/dimitarvp/120/38664_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  dimitarvp
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="garrison" data-post="34" data-topic="73559">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/letter_avatar_proxy/v4/letter/g/3bc359/48.png" class="avatar"> garrison:</div>
<blockquote>
<p>What’s the advantage of using Rust there? Or rather, how much (memory) bug surface is there in the NIF that Rust covers? I really have no idea what it takes to wrap SQLite in a NIF but I assume there’s a decent amount of glue needed, and that’s the Rust part?</p>
</blockquote>
</aside>
<p>Less, or zero, crashes. I was very careful not to just fangirl over Rust when I resumed serious work on the project earlier this year. The point was to be ultra stable. Secondary, but almost as important goal is, to put a fence / shield in front of the plenty of undefined behaviours that SQLite would happily expose you to if you don’t manually enforce certain invariants and relationships between the function arguments. That latter part is still, and always will be, work in progress.</p>
<p>(RE: memory bugs, they are not bugs per se. It’s just that SQLite gives you no guarantees what will happen if you pass a certain combination of arguments to a function.)</p>
<p>Tertiary goal is to make everything type-safe and with a stable contract. SQLite PRAGMAs are notoriously shaky there.</p>
<p>Final goal: make sure you never put integer values in string columns and vice versa. SQLite mostly does not protect you from that. (Yes, even with STRICT tables.)</p>
<p>So TL;DR: zero runtime crashes and guardrails that guarantee consistent behaviour + type safety.</p>
<p>I love the idea of SQLite and after I finally add 1-2 more features to my library I’ll start using it (and thus SQLite with it) for a bunch of hobby projects. HOWEVER. It has a number of warts… but it’s still best-in-class in its niche. My library aims to put a concrete blanket over the very annoying defects of SQLite because at the end of day – I’ll say it again – most projects ever done on this planet do <em>not</em> need a separate DB server.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="379673" data-batch-url="/posts/batch_likers">
                        2
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/why-so-serious/73559/35">Post #34</a>
	                </div>
	            </div>
              <div id="likers-container-379673" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="379673"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #34"></div>
  </section>
</div>
    <div class="postbit" id="379674" data-post-id="379674">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="dimitarvp" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/dimitarvp/120/38664_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  dimitarvp
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="garrison" data-post="34" data-topic="73559">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/letter_avatar_proxy/v4/letter/g/3bc359/48.png" class="avatar"> garrison:</div>
<blockquote>
<p>At this point I would not touch anything distributed or database-shaped unless the team behind it is <em>serious</em> about simulation testing and correctness. Anything less will be 100% loaded with these bugs. And if they show even the slightest indignation after being shown a correctness bug, run <em>far away</em>.</p>
</blockquote>
</aside>
<p>Yep, I am starting to learn that. I wanted to use NATS Jetstream so much! But I guess not, sigh. In the HN thread that’s linked to the Aphyr article that I pasted above, there are links to discussions where NATS authors don’t even understand the distributed problems they introduced. <img src="https://forum.elixirforum.com/images/emoji/apple/cry.png?v=15" title=":cry:" class="emoji" alt=":cry:" loading="lazy" width="20" height="20"> Ouch.</p>
<aside class="quote no-group" data-username="garrison" data-post="34" data-topic="73559">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/letter_avatar_proxy/v4/letter/g/3bc359/48.png" class="avatar"> garrison:</div>
<blockquote>
<p>Shove your rows into FoundationDB (with a versionstamped key) and never worry about this again. <a class="mention" href="/u/jstimps" rel="nofollow">@jstimps</a> has literally <a href="https://hexdocs.pm/erlfdb/kv_queue.html" rel="noopener nofollow ugc">already done all of the work for you</a>! <img src="https://forum.elixirforum.com/images/emoji/apple/slight_smile.png?v=15" title=":slight_smile:" class="emoji" alt=":slight_smile:" loading="lazy" width="20" height="20"></p>
</blockquote>
</aside>
<p>I do my best to read each and every new ElixirForum thread and carefully write down the links that interest me. I made sure to re-record this one, thank you. I know I’ll need an MQ in my next hobby projects (stuff that I like very much + it will be a portfolio) so this link is _very_welcome.</p>
<p>One relatively new offering is <a href="https://s2.dev/" rel="noopener nofollow ugc">s2.dev</a>. In the same HN thread (for the NATS Jestream Aphyr test) the S2 author says they do simulation testing.</p>
<aside class="quote no-group" data-username="garrison" data-post="34" data-topic="73559">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/letter_avatar_proxy/v4/letter/g/3bc359/48.png" class="avatar"> garrison:</div>
<blockquote>
<p>I hope that Hobbes will solve the accessibility problem more than anything.</p>
</blockquote>
</aside>
<p>As I said, many people on this forum are much quieter than they should be – trauma and core personal traits I suppose – but a lot of us are rooting for you.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="379674" data-batch-url="/posts/batch_likers">
                        2
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/why-so-serious/73559/36">Post #35</a>
	                </div>
	            </div>
              <div id="likers-container-379674" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="379674"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #35"></div>
  </section>
</div>
    <div class="postbit" id="379676" data-post-id="379676">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="garrison" src="/assets/icons/user-9f439610.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  garrison
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="dimitarvp" data-post="36" data-topic="73559">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/dimitarvp/48/38664_2.png" class="avatar"> dimitarvp:</div>
<blockquote>
<p>there are links to discussions where NATS authors don’t even understand the distributed problems they introduced</p>
</blockquote>
</aside>
<p>Well, to be fair, the intersection of consensus protocols and durability is <a href="https://pages.cs.wisc.edu/~aws/papers/fast18.pdf" rel="noopener nofollow ugc">very dangerous and confusing</a> and every major consensus implementation was broken when that paper was published. I would bet most still are, though I don’t actually know.</p>
<p>But that’s not what was going on here. This is not a case of “there was a very subtle bug in our consensus implementation”. Like, that happens. I would not throw shade for that.</p>
<p>These people literally were just not fsyncing to disk. This is not a case of incompetence but <em>malice</em>. They are doing it to look better on benchmarks. This nonsense is <em>extremely common</em> with database companies; most famously MongoDB, but it’s practically endemic. At this point I don’t trust database companies <em>at all</em> (with limited exceptions) because there is a massive financial incentive to <em>lie incessantly</em>. Jepsen is the only thing keeping them in check even a little bit.</p>
<p>As it turns out not writing your acknowledgements to disk does also break Raft and is indeed utterly negligent (seriously how can you possibly not know this), but that’s really just icing on the cake.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="379676" data-batch-url="/posts/batch_likers">
                        4
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/why-so-serious/73559/37">Post #36</a>
	                </div>
	            </div>
              <div id="likers-container-379676" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="379676"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #36"></div>
  </section>
</div>
    <div class="postbit" id="379679" data-post-id="379679">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="ausimian" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/ausimian/120/22703_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  ausimian
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="garrison" data-post="33" data-topic="73559">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/letter_avatar_proxy/v4/letter/g/3bc359/48.png" class="avatar"> garrison:</div>
<blockquote>
<p>I’m curious: what sorts of things have you used TLA for in a professional setting? Sounds very cool.</p>
</blockquote>
</aside>
<p>It was about 15 years ago, I was working on a bespoke RTOS for some custom silicon - 28 core Xtensa DSPs - for the Microsoft HoloLens AR headset. We used TLA to design the inter-core messaging and power mgmt algorithms.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="379679" data-batch-url="/posts/batch_likers">
                        3
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/why-so-serious/73559/38">Post #37</a>
	                </div>
	            </div>
              <div id="likers-container-379679" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="379679"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #37"></div>
  </section>
</div>
    <div class="postbit" id="379802" data-post-id="379802">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="garrison" src="/assets/icons/user-9f439610.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  garrison
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I got around to checking out the s2 thing and it seems to be a closed source cloud thing built on top of another closed source cloud thing (s3). This has been a big trend with database-adjacent stuff lately and it’s something I’m not a big fan of for a couple of reasons.</p>
<p>The idea is that you build your fancy distributed system on top of an abstraction like S3 and allow it to solve all of the hard problems like consensus and durability for you. (OG S3 has poor consistency but there are new “versions” of it that are much better.) And, actually, this sounds like a pretty great idea on paper, and you might recognize it as being quite similar to my pitch for Hobbes or for FoundationDB.</p>
<p>But the <em>difference</em> is that you can run something like FDB on your own servers, whereas if you want S3 then you are locked in. I really don’t think that’s a great position to be in, personally. There <em>are</em> alternatives to S3 but none of them are really comparable as far as I can tell (especially for the new strongly consistent stuff). MinIO is the closest I’m aware of and my impression is that it’s a bit of a clown fiesta (plus they have been rugpulling).</p>
<p>The other problem with S3, and actually also with FDB, is that you cannot run fully-integrated simulation tests because they are external systems. These s2 people claim to be doing DST but unless Bezos handed them the source code (strong doubt) they are obviously mocking out S3. And when your system is entirely dependent on S3 for its guarantees and behavior, well, that means you’re mocking out your guarantees. Sus.</p>
<p>Actually, if Hobbes succeeds I think it will be the first system to ever solve that last point, because unlike FDB we can write the higher-level layers in the same language/runtime as Hobbes itself. And that only works because the BEAM is an advanced distributed runtime <em>and</em> Elixir is a friendly language. More on that later.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="379802" data-batch-url="/posts/batch_likers">
                        4
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/why-so-serious/73559/39">Post #38</a>
	                </div>
	            </div>
              <div id="likers-container-379802" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="379802"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #38"></div>
  </section>
</div>
    <div class="postbit" id="379807" data-post-id="379807">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="Lucassifoni" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/Lucassifoni/120/39057_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  Lucassifoni
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I did not yet dig too much into Garage, but from afar it looks like a serious alternative to MinIO, while maybe being a bit young ?</p>
<aside class="onebox allowlistedgeneric" data-onebox-src="https://garagehq.deuxfleurs.fr/">
  <header class="source">
      <img src="https://garagehq.deuxfleurs.fr/favicon.ico" class="site-icon" alt="" width="48" height="48">

      <a href="https://garagehq.deuxfleurs.fr/" target="_blank" rel="noopener nofollow ugc">Garage</a>
  </header>

  <article class="onebox-body">
    <div class="aspect-image" style="--aspect-ratio:690/373;"><img src="https://garagehq.deuxfleurs.fr/images/og-default.png" class="thumbnail" alt="" width="690" height="373"></div>

<h3><a href="https://garagehq.deuxfleurs.fr/" target="_blank" rel="noopener nofollow ugc">The Garage team - An S3 object store so reliable you can run it outside...</a></h3>

  <p>An S3 object store so reliable you can run it outside datacenters</p>


  </article>

  <div class="onebox-metadata">
    
    
  </div>

  <div style="clear: both"></div>
</aside>

<aside class="onebox allowlistedgeneric" data-onebox-src="https://garagehq.deuxfleurs.fr/documentation/design/">
  <header class="source">
      <img src="https://garagehq.deuxfleurs.fr/favicon.ico" class="site-icon" alt="" width="48" height="48">

      <a href="https://garagehq.deuxfleurs.fr/documentation/design/" target="_blank" rel="noopener nofollow ugc">Garage</a>
  </header>

  <article class="onebox-body">
    <div class="aspect-image" style="--aspect-ratio:690/373;"><img src="https://garagehq.deuxfleurs.fr/images/og-default.png" class="thumbnail" alt="" width="690" height="373"></div>

<h3><a href="https://garagehq.deuxfleurs.fr/documentation/design/" target="_blank" rel="noopener nofollow ugc">Design</a></h3>

  <p>An S3 object store so reliable you can run it outside datacenters</p>


  </article>

  <div class="onebox-metadata">
    
    
  </div>

  <div style="clear: both"></div>
</aside>

<p>(Note that it currently is advertised for "small scale”.)</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="379807" data-batch-url="/posts/batch_likers">
                        2
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/why-so-serious/73559/40">Post #39</a>
	                </div>
	            </div>
              <div id="likers-container-379807" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="379807"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #39"></div>
  </section>
</div>
    <div class="postbit" id="379809" data-post-id="379809">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="garrison" src="/assets/icons/user-9f439610.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  garrison
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I am aware of this project and I do like it. They clearly <a href="https://garagehq.deuxfleurs.fr/blog/2025-commoning-opensource/" rel="noopener nofollow ugc">share my values</a> about all of this rugpull nonsense and for that alone they have my full support.</p>
<p>However, and this is what I was getting at with the MinIO point, there is a bit of a technical issue here. For the trend I was talking about specifically, weak consistency guarantees are kind-of a problem, as is high latency. This is why AWS introduced their “S3 Express One Zone Storage Class” (seriously they need to fire their entire marketing dept), which to be clear is actually not S3 at all (other than by name) but an entirely new system. This system targets a class of products which has been emerging lately: hosted cloud services where you “bring your own S3”. There are many examples of this, like Snowflake (data warehouse), Quickwit (full-text search), Turbopuffer (vector search), s2 (some queue thing I guess), Neon (literally Postgres pages shoved into S3), and so on.</p>
<p>The reason AWS had to essentially build a new S3 to enable these products is that, fundamentally, object storage with its high latency and poor consistency guarantees is kinda a bad primitive for building databases. People were just using it because it was <em>there</em>, so they have adapted.</p>
<p>The “alternatives” like MinIO and Garage and others (SeaweedFS is another) have not really caught up, though. They are classical object stores and make poor primitives.</p>
<p>It makes a lot more sense to <em>start</em> with a strongly consistent system, because strong consistency is very difficult to achieve but very easy to give up.</p>
<p>And, as you may have noticed, this is exactly what I have been doing <img src="https://forum.elixirforum.com/images/emoji/apple/slight_smile.png?v=15" title=":slight_smile:" class="emoji" alt=":slight_smile:" loading="lazy" width="20" height="20"></p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="379809" data-batch-url="/posts/batch_likers">
                        3
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/why-so-serious/73559/41">Post #40</a>
	                </div>
	            </div>
              <div id="likers-container-379809" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="379809"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-last-post cat-last-post" title="Last post!"></div>
  </section>
</div>
</template></turbo-stream><turbo-stream action="replace" target="load-more-container"><template><div id="load-more-container" class="load-more-container">
    <span class="all-loaded">— All posts loaded —</span>
</div></template></turbo-stream>