# Dave Cheney

The acme of foolishness

This is one page of public article previews, not the complete archive. Follow Next page to continue. Summaries are not the original full articles.

## Pop quiz: what time was it?

DevFeed: [Pop quiz: what time was it?](<https://devfeed.tech/articles/pop-quiz-what-time-was-it-20839.md>)

Original publisher: [Read original article](<https://dave.cheney.net/2025/12/18/pop-quiz-what-time-was-it>)

Author: Dave Cheney

Published: 2025-12-18T00:38:52Z

Content type: tutorial

Language: en

Sources: [Dave Cheney](<https://devfeed.tech/sources/dave-cheney.md>)

Topics: [coding](<https://devfeed.tech/topics/coding.md>), [GitHub Copilot](<https://devfeed.tech/topics/github-copilot.md>), [ai-coding](<https://devfeed.tech/topics/ai-coding.md>), [DateTime](<https://devfeed.tech/topics/datetime.md>)

Tags: [ai](<https://devfeed.tech/tags/ai.md>), [ai-coding](<https://devfeed.tech/tags/ai-coding.md>), [coding](<https://devfeed.tech/tags/coding.md>), [coding-assistant](<https://devfeed.tech/tags/coding-assistant.md>), [go](<https://devfeed.tech/tags/go.md>), [time](<https://devfeed.tech/tags/time.md>)

### AI overview

A short quiz examines incorrect advice from an AI coding assistant by asking how far apart two timestamps printed by a program will be. The provided text does not include the answer.

### Source excerpt

Here's a small quiz derived from some incorrect advice from an AI coding assistant. This program prints two timestamps; will they be a. Roughly the same time (ie, the same second)b. Roughly 10 seconds apartc. Something else Answer after the fold

## Microblog: TestMain can cause one to question reality

DevFeed: [Microblog: TestMain can cause one to question reality](<https://devfeed.tech/articles/microblog-testmain-can-cause-one-to-question-reality-20837.md>)

Original publisher: [Read original article](<https://dave.cheney.net/2024/02/22/microblog-testmain-can-cause-one-to-question-reality>)

Author: Dave Cheney

Published: 2024-02-21T21:04:26Z

Content type: opinion

Language: en

Sources: [Dave Cheney](<https://devfeed.tech/sources/dave-cheney.md>)

Topics: [Go Language](<https://devfeed.tech/topics/go-language.md>), [test](<https://devfeed.tech/topics/test.md>), [bug](<https://devfeed.tech/topics/bug.md>), [Logging](<https://devfeed.tech/topics/logging.md>)

Tags: [bug](<https://devfeed.tech/tags/bug.md>), [go](<https://devfeed.tech/tags/go.md>), [goroutines](<https://devfeed.tech/tags/goroutines.md>), [logging](<https://devfeed.tech/tags/logging.md>), [test](<https://devfeed.tech/tags/test.md>), [testing](<https://devfeed.tech/tags/testing.md>), [tests](<https://devfeed.tech/tags/tests.md>)

### AI overview

A one-line change caused a Go test to appear as though a failing test was not failing or being run. Attempts to change Go versions and run the tests elsewhere did not resolve the issue; a commented-out check and a logging library that spawns background goroutines were involved.

### Source excerpt

This morning a one line change had several of us tearing up the fabric of reality trying to understand why a failing test wasn't failing, or, in fact, being run at all. Increasingly frantic efforts to upgrade/downgrade Go, run the tests on another machine, run the tests in CI, all served to only unnerve us [...]

## Why Go benchmarks allocate heap memory for interface values

DevFeed: [Why Go benchmarks allocate heap memory for interface values](<https://devfeed.tech/articles/a-few-bytes-here-a-few-there-pretty-soon-you-re-talking-real-memory-20836.md>)

Original publisher: [Read original article](<https://dave.cheney.net/2021/01/05/a-few-bytes-here-a-few-there-pretty-soon-youre-talking-real-memory>)

Author: Dave Cheney

Published: 2021-01-05T12:39:20Z

Content type: article

Language: en

Sources: [Dave Cheney](<https://devfeed.tech/sources/dave-cheney.md>)

Topics: [Go Language](<https://devfeed.tech/topics/go-language.md>), [Benchmark](<https://devfeed.tech/topics/benchmark.md>), [Code](<https://devfeed.tech/topics/code.md>), [Compiler](<https://devfeed.tech/topics/compiler.md>)

Tags: [benchmark](<https://devfeed.tech/tags/benchmark.md>), [code](<https://devfeed.tech/tags/code.md>), [compiler](<https://devfeed.tech/tags/compiler.md>), [go](<https://devfeed.tech/tags/go.md>), [memory](<https://devfeed.tech/tags/memory.md>), [programming](<https://devfeed.tech/tags/programming.md>)

### AI overview

This article explains why a Go benchmark allocates heap memory when a slice is passed through an interface. It attributes the allocation to the compiler moving the slice value to the heap because it cannot prove the value does not outlive its use, and discusses allocation size classes in Go 1.16.

### Source excerpt

Today's post comes from a recent Go pop quiz. Consider this benchmark fragment. A convenience wrapper around sort.Sort(sort.StringSlice(s)), sort.Strings sorts the input in place, so it isn't expected to allocate (or at least that's what 43% of the tweeps who responded thought). However it turns out that, at least in recent versions of Go, each [...]

## Why Testing a One-Line Bug Fix Can Take Nearly a Week

DevFeed: [Why Testing a One-Line Bug Fix Can Take Nearly a Week](<https://devfeed.tech/articles/the-story-of-the-one-line-fix-20835.md>)

Original publisher: [Read original article](<https://dave.cheney.net/2020/12/15/the-story-of-the-one-line-fix>)

Author: Dave Cheney

Published: 2020-12-15T04:45:54Z

Content type: opinion

Language: en

Sources: [Dave Cheney](<https://devfeed.tech/sources/dave-cheney.md>)

Topics: [bug](<https://devfeed.tech/topics/bug.md>), [test](<https://devfeed.tech/topics/test.md>), [Microservices](<https://devfeed.tech/topics/microservices.md>)

Tags: [bug](<https://devfeed.tech/tags/bug.md>), [code](<https://devfeed.tech/tags/code.md>), [database](<https://devfeed.tech/tags/database.md>), [function](<https://devfeed.tech/tags/function.md>), [microservices](<https://devfeed.tech/tags/microservices.md>), [object](<https://devfeed.tech/tags/object.md>), [programming](<https://devfeed.tech/tags/programming.md>), [small-ideas](<https://devfeed.tech/tags/small-ideas.md>), [state](<https://devfeed.tech/tags/state.md>), [test](<https://devfeed.tech/tags/test.md>), [tests](<https://devfeed.tech/tags/tests.md>)

### AI overview

The article contrasts making a quick one-line bug fix with first creating a reproducible test. It argues that difficult setup, dependencies, object state, and test data can make validating a seemingly simple fix take nearly a week.

### Source excerpt

Picture yourself, an engineer working at the hottest distributed microservices de jour, assigned to fix a bug. You jump into an unfamiliar codebase and quickly locate the line where the problem occurred. The fix is simple, just return early or substitute a default value in the case that one cannot be determined from your input. [...]

## How to dump the GOSSAFUNC graph for a method

DevFeed: [How to dump the GOSSAFUNC graph for a method](<https://devfeed.tech/articles/how-to-dump-the-gossafunc-graph-for-a-method-20834.md>)

Original publisher: [Read original article](<https://dave.cheney.net/2020/06/19/how-to-dump-the-gossafunc-graph-for-a-method>)

Author: Dave Cheney

Published: 2020-06-19T03:36:57Z

Content type: tutorial

Language: en

Sources: [Dave Cheney](<https://devfeed.tech/sources/dave-cheney.md>)

Topics: [Go Language](<https://devfeed.tech/topics/go-language.md>), [Compiler](<https://devfeed.tech/topics/compiler.md>), [debugging](<https://devfeed.tech/topics/debugging.md>), [HTML](<https://devfeed.tech/topics/html.md>)

Tags: [compiler](<https://devfeed.tech/tags/compiler.md>), [debugging](<https://devfeed.tech/tags/debugging.md>), [function](<https://devfeed.tech/tags/function.md>), [go](<https://devfeed.tech/tags/go.md>), [gossafunc](<https://devfeed.tech/tags/gossafunc.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [html](<https://devfeed.tech/tags/html.md>), [program](<https://devfeed.tech/tags/program.md>), [programming](<https://devfeed.tech/tags/programming.md>), [ssa](<https://devfeed.tech/tags/ssa.md>)

### AI overview

This tutorial explains how to use the Go compiler's SSA debugging facility to produce HTML output for compilation phases and dump SSA information for functions, value methods, and pointer methods. It describes selecting the target through the GOSSAFUNC environment variable and determining the equivalent function names for methods.

### Source excerpt

The Go compiler's SSA backend contains a facility to produce HTML debugging output of the compilation phases. This post covers how to print the SSA output for function and methods. Let's start with a sample program which contains a function, a value method, and a pointer method: Control of the SSA debugging output is via [...]

## Diamond interface composition in Go 1.14

DevFeed: [Diamond interface composition in Go 1.14](<https://devfeed.tech/articles/diamond-interface-composition-in-go-1-14-20833.md>)

Original publisher: [Read original article](<https://dave.cheney.net/2020/05/24/diamond-interface-composition-in-go-1-14>)

Author: Dave Cheney

Published: 2020-05-24T08:49:01Z

Content type: article

Language: en

Sources: [Dave Cheney](<https://devfeed.tech/sources/dave-cheney.md>)

Topics: [Go Language](<https://devfeed.tech/topics/go-language.md>), [modules](<https://devfeed.tech/topics/modules.md>), [Compiler](<https://devfeed.tech/topics/compiler.md>)

Tags: [compiler](<https://devfeed.tech/tags/compiler.md>), [embedded](<https://devfeed.tech/tags/embedded.md>), [embedding](<https://devfeed.tech/tags/embedding.md>), [go](<https://devfeed.tech/tags/go.md>), [interfaces](<https://devfeed.tech/tags/interfaces.md>), [module](<https://devfeed.tech/tags/module.md>), [modules](<https://devfeed.tech/tags/modules.md>), [programming](<https://devfeed.tech/tags/programming.md>)

### AI overview

A brief explanation of Go 1.14's support for composing interfaces with overlapping method sets, including how embedding compares with explicit declarations and how it resolves diamond-shaped embedding limitations.

### Source excerpt

Per the overlapping interfaces proposal, Go 1.14 now permits embedding of interfaces with overlapping method sets. This is a brief post explain what this change means: Let's start with the definition of the three key interfaces from the io package; io.Reader, io.Writer, and io.Closer: Just as embedding a type inside a struct allows the embedded type's [...]

## Why Go's json.Unmarshal Requires a Pointer to a Pointer

DevFeed: [Why Go's json.Unmarshal Requires a Pointer to a Pointer](<https://devfeed.tech/articles/fatih-s-question-20832.md>)

Original publisher: [Read original article](<https://dave.cheney.net/2020/05/16/fatihs-question>)

Author: Dave Cheney

Published: 2020-05-16T11:31:37Z

Content type: tutorial

Language: en

Sources: [Dave Cheney](<https://devfeed.tech/sources/dave-cheney.md>)

Topics: [Go Language](<https://devfeed.tech/topics/go-language.md>), [JSON](<https://devfeed.tech/topics/json.md>)

Tags: [go](<https://devfeed.tech/tags/go.md>), [json](<https://devfeed.tech/tags/json.md>), [pointers](<https://devfeed.tech/tags/pointers.md>), [programming](<https://devfeed.tech/tags/programming.md>)

### AI overview

A Go tutorial explains why JSON decoding requires passing a pointer to the caller's value, including why a pointer to a pointer is needed in one case.

### Source excerpt

A few days ago Fatih posted this question on twitter. I'm going to attempt to give my answer, however to do that I need to apply some simplifications as my previous attempts to answer it involved a lot of phrases like a pointer to a pointer, and other unhelpful waffling. Hopefully my simplified answer can [...]

## Ensmallening Go binaries by prohibiting comparisons

DevFeed: [Ensmallening Go binaries by prohibiting comparisons](<https://devfeed.tech/articles/ensmallening-go-binaries-by-prohibiting-comparisons-20831.md>)

Original publisher: [Read original article](<https://dave.cheney.net/2020/05/09/ensmallening-go-binaries-by-prohibiting-comparisons>)

Author: Dave Cheney

Published: 2020-05-09T10:23:17Z

Content type: article

Language: en

Sources: [Dave Cheney](<https://devfeed.tech/sources/dave-cheney.md>)

Topics: [Go Language](<https://devfeed.tech/topics/go-language.md>), [Compiler](<https://devfeed.tech/topics/compiler.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [binaries](<https://devfeed.tech/tags/binaries.md>), [code](<https://devfeed.tech/tags/code.md>), [compiler](<https://devfeed.tech/tags/compiler.md>), [go](<https://devfeed.tech/tags/go.md>), [padding](<https://devfeed.tech/tags/padding.md>), [programming](<https://devfeed.tech/tags/programming.md>), [types](<https://devfeed.tech/tags/types.md>)

### AI overview

This article examines how equality and struct comparison work in Go, including memory layout, padding, alignment, and memcmp-based comparisons. It connects these implementation details to the size of compiled Go binaries.

### Source excerpt

Conventional wisdom dictates that the larger the number of types declared in a Go program, the larger the resulting binary. Intuitively this makes sense, after all, what's the point in defining a bunch of types if you're not going to write code that operates on them. However, part of the job of a linker is [...]

## Mid-stack inlining in Go

DevFeed: [Mid-stack inlining in Go](<https://devfeed.tech/articles/mid-stack-inlining-in-go-20830.md>)

Original publisher: [Read original article](<https://dave.cheney.net/2020/05/02/mid-stack-inlining-in-go>)

Author: Dave Cheney

Published: 2020-05-02T05:09:15Z

Content type: article

Language: en

Sources: [Dave Cheney](<https://devfeed.tech/sources/dave-cheney.md>)

Topics: [Go Language](<https://devfeed.tech/topics/go-language.md>), [Compiler](<https://devfeed.tech/topics/compiler.md>)

Tags: [compilation](<https://devfeed.tech/tags/compilation.md>), [compiler](<https://devfeed.tech/tags/compiler.md>), [go](<https://devfeed.tech/tags/go.md>), [inlining](<https://devfeed.tech/tags/inlining.md>), [optimisation](<https://devfeed.tech/tags/optimisation.md>), [performance](<https://devfeed.tech/tags/performance.md>), [programming](<https://devfeed.tech/tags/programming.md>)

### AI overview

This article explains the limits of inlining in Go, comparing leaf and mid-stack inlining. It covers the trade-offs among execution speed, compile time, binary size, optimization opportunities, and the compiler's inlining budget.

### Source excerpt

In the previous post I discussed how leaf inlining allows the Go compiler to reduce the overhead of function calls and extend optimisation opportunities across function boundaries. In this post I'll discuss the limits of inlining and leaf vs mid-stack inlining. The limits of inlining Inlining a function into its caller removes the call's overhead [...]

## Inlining optimisations in Go

DevFeed: [Inlining optimisations in Go](<https://devfeed.tech/articles/inlining-optimisations-in-go-20829.md>)

Original publisher: [Read original article](<https://dave.cheney.net/2020/04/25/inlining-optimisations-in-go>)

Author: Dave Cheney

Published: 2020-04-25T06:38:17Z

Content type: article

Language: en

Sources: [Dave Cheney](<https://devfeed.tech/sources/dave-cheney.md>)

Topics: [Go Language](<https://devfeed.tech/topics/go-language.md>), [Compiler](<https://devfeed.tech/topics/compiler.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [compilation](<https://devfeed.tech/tags/compilation.md>), [compiler](<https://devfeed.tech/tags/compiler.md>), [compilers](<https://devfeed.tech/tags/compilers.md>), [function](<https://devfeed.tech/tags/function.md>), [go](<https://devfeed.tech/tags/go.md>), [goroutines](<https://devfeed.tech/tags/goroutines.md>), [inlining](<https://devfeed.tech/tags/inlining.md>), [optimisation](<https://devfeed.tech/tags/optimisation.md>), [performance](<https://devfeed.tech/tags/performance.md>), [programming](<https://devfeed.tech/tags/programming.md>)

### AI overview

This article explains how the Go compiler implements function inlining and how the optimization affects Go code. It focuses on gc, the de facto Go compiler from golang.org, while noting that other Go compilers may differ in implementation and effectiveness.

### Source excerpt

This is a post about how the Go compiler implements inlining and how this optimisation affects your Go code. n.b. This article focuses on gc, the de facto Go compiler from golang.org. The concepts discussed apply broadly to other Go compilers like gccgo and tinygo but may differ in implementation and efficacy. What is inlining? [...]

## go test -v streaming output

DevFeed: [go test -v streaming output](<https://devfeed.tech/articles/go-test-v-streaming-output-20828.md>)

Original publisher: [Read original article](<https://dave.cheney.net/2020/03/10/go-test-v-streaming-output>)

Author: Dave Cheney

Published: 2020-03-10T07:03:03Z

Content type: article

Language: en

Sources: [Dave Cheney](<https://devfeed.tech/sources/dave-cheney.md>)

Topics: [Go Language](<https://devfeed.tech/topics/go-language.md>), [Streaming](<https://devfeed.tech/topics/streaming.md>), [Testing](<https://devfeed.tech/topics/testing.md>), [Unit testing](<https://devfeed.tech/topics/unit-testing.md>)

Tags: [go](<https://devfeed.tech/tags/go.md>), [go-test](<https://devfeed.tech/tags/go-test.md>), [integration](<https://devfeed.tech/tags/integration.md>), [programming](<https://devfeed.tech/tags/programming.md>), [retry](<https://devfeed.tech/tags/retry.md>), [standard-library](<https://devfeed.tech/tags/standard-library.md>), [streaming](<https://devfeed.tech/tags/streaming.md>), [testing](<https://devfeed.tech/tags/testing.md>), [unit-test](<https://devfeed.tech/tags/unit-test.md>), [unit-testing](<https://devfeed.tech/tags/unit-testing.md>)

### AI overview

The article explains that Go 1.14 streams test output as it is produced when using -v, instead of buffering output until the test finishes. This improves visibility when debugging long-running or retrying integration tests.

### Source excerpt

The testing package is one of my favourite packages in the Go standard library, not just because of its low noise approach to unit testing, but, over the lifetime of Go, it has received a steady stream of quality of life improvements driven by real world usage. The most recent example of this is, in [...]

## Are large slices more expensive than smaller ones?

DevFeed: [Are large slices more expensive than smaller ones?](<https://devfeed.tech/articles/are-large-slices-more-expensive-than-smaller-ones-20827.md>)

Original publisher: [Read original article](<https://dave.cheney.net/2020/03/01/are-large-slices-more-expensive-than-smaller-ones>)

Author: Dave Cheney

Published: 2020-03-01T05:35:26Z

Content type: article

Language: en

Sources: [Dave Cheney](<https://devfeed.tech/sources/dave-cheney.md>)

Topics: [Go Language](<https://devfeed.tech/topics/go-language.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [code](<https://devfeed.tech/tags/code.md>), [go](<https://devfeed.tech/tags/go.md>), [golang](<https://devfeed.tech/tags/golang.md>), [internals](<https://devfeed.tech/tags/internals.md>), [performance](<https://devfeed.tech/tags/performance.md>), [slices](<https://devfeed.tech/tags/slices.md>)

### AI overview

In Go, assigning a large slice is not more expensive than assigning a smaller slice of the same type. A slice value consists of three machine words--a pointer to its backing array, its length, and its capacity--so assigning a slice copies only those three words, regardless of the amount of data in the backing array.

### Source excerpt

Programmers have a tendency to be superstitious. Particularly, when a programmer hears that copies are expensive, they start to see them everywhere, especially when they learn that, in Go, every assignment is a copy. Consider this code; x is three orders of magnitude larger than y, is the assignment of x to a more expensive [...]

## The Zen of Go

DevFeed: [The Zen of Go](<https://devfeed.tech/articles/the-zen-of-go-20826.md>)

Original publisher: [Read original article](<https://dave.cheney.net/2020/02/23/the-zen-of-go>)

Author: Dave Cheney

Published: 2020-02-23T06:46:10Z

Content type: opinion

Language: en

Sources: [Dave Cheney](<https://devfeed.tech/sources/dave-cheney.md>)

Topics: [Go Language](<https://devfeed.tech/topics/go-language.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [advice](<https://devfeed.tech/tags/advice.md>), [article](<https://devfeed.tech/tags/article.md>), [code](<https://devfeed.tech/tags/code.md>), [design](<https://devfeed.tech/tags/design.md>), [go](<https://devfeed.tech/tags/go.md>), [small-ideas](<https://devfeed.tech/tags/small-ideas.md>)

### AI overview

The article examines how developers can recognize and teach good Go code. It questions whether the idea of idiomatic Go and Go Proverbs provides effective guidance, arguing that idiomatic conventions can be exclusionary and that proverbs are observations rather than statements of value.

### Source excerpt

This article was derived from my GopherCon Israel 2020 presentation. It's also quite long. If you'd prefer a shorter version, head over to the-zen-of-go.netlify.com. A recording of the presentation is available on YouTube. How should I write good code? Something that I've been thinking about a lot recently, when reflecting on the body of my [...]

## Dynamically scoped variables in Go

DevFeed: [Dynamically scoped variables in Go](<https://devfeed.tech/articles/dynamically-scoped-variables-in-go-20825.md>)

Original publisher: [Read original article](<https://dave.cheney.net/2019/12/08/dynamically-scoped-variables-in-go>)

Author: Dave Cheney

Published: 2019-12-08T01:36:27Z

Content type: tutorial

Language: en

Sources: [Dave Cheney](<https://devfeed.tech/sources/dave-cheney.md>)

Topics: [Go Language](<https://devfeed.tech/topics/go-language.md>), [Unit testing](<https://devfeed.tech/topics/unit-testing.md>), [Testing](<https://devfeed.tech/topics/testing.md>)

Tags: [code](<https://devfeed.tech/tags/code.md>), [go](<https://devfeed.tech/tags/go.md>), [small-ideas](<https://devfeed.tech/tags/small-ideas.md>), [testing](<https://devfeed.tech/tags/testing.md>), [unit-testing](<https://devfeed.tech/tags/unit-testing.md>)

### AI overview

This article explores a Go unit-testing problem involving repetitive assertions and the need to pass testing context through helper calls. It presents dynamic scoping as a thought experiment and describes how stack traces and pointer parsing can be used to emulate it in restricted cases.

### Source excerpt

This is a thought experiment in API design. It starts with the classic Go unit testing idiom: func TestOpenFile(t *testing.T) { f, err := os.Open("notfound") if err != nil { t.Fatal(err) } // ... } What's the problem with this code? The assertion. if err != nil { ... } is repetitive and in the [...]

## Complementary engineering indicators

DevFeed: [Complementary engineering indicators](<https://devfeed.tech/articles/complementary-engineering-indicators-20823.md>)

Original publisher: [Read original article](<https://dave.cheney.net/2019/12/04/complementary-engineering-indicators>)

Author: Dave Cheney

Published: 2019-12-04T09:46:26Z

Content type: opinion

Language: en

Sources: [Dave Cheney](<https://devfeed.tech/sources/dave-cheney.md>)

Topics: [Development](<https://devfeed.tech/topics/development.md>), [issue tracker](<https://devfeed.tech/topics/issue-tracker.md>), [Statistics](<https://devfeed.tech/topics/statistics.md>), [Software](<https://devfeed.tech/topics/software.md>)

Tags: [development](<https://devfeed.tech/tags/development.md>), [engineering](<https://devfeed.tech/tags/engineering.md>), [issue-tracker](<https://devfeed.tech/tags/issue-tracker.md>), [metrics](<https://devfeed.tech/tags/metrics.md>), [small-ideas](<https://devfeed.tech/tags/small-ideas.md>), [software-delivery](<https://devfeed.tech/tags/software-delivery.md>)

### AI overview

The article discusses using complementary engineering indicators to assess software project health. It describes tracking delivery date, completeness of promised work, and defects reported, while noting that optimizing one measure can negatively affect another.

### Source excerpt

Last year I had the opportunity to watch Cat Swetel's presentation The Development Metrics You Should Use (but Don't). The information that could be gleaned from just tracking the start and finish date of work items was eye opening. If you're using an issue tracker this information is probably already (perhaps with some light data [...]

## Internets of interest #14: UNIX v0

DevFeed: [Internets of interest #14: UNIX v0](<https://devfeed.tech/articles/internets-of-interest-14-unix-v0-20822.md>)

Original publisher: [Read original article](<https://dave.cheney.net/2019/11/18/internets-of-interest-14-unix-v0>)

Author: Dave Cheney

Published: 2019-11-17T16:04:20Z

Content type: article

Language: en

Sources: [Dave Cheney](<https://devfeed.tech/sources/dave-cheney.md>)

Topics: [Unix](<https://devfeed.tech/topics/unix.md>)

Tags: [history](<https://devfeed.tech/tags/history.md>), [internets-of-interest](<https://devfeed.tech/tags/internets-of-interest.md>), [unix](<https://devfeed.tech/tags/unix.md>)

### AI overview

The article highlights UNIX v0 and directs readers to the Living Computer Museum's restoration page for more information.

### Source excerpt

Read more over at the Living Computer Museum's restoration page.

## Internets of interest: Warner Losh on the first ten years of UNIX

DevFeed: [Internets of interest: Warner Losh on the first ten years of UNIX](<https://devfeed.tech/articles/internets-of-interest-warner-losh-on-the-first-ten-years-of-unix-20821.md>)

Original publisher: [Read original article](<https://dave.cheney.net/2019/11/16/internets-of-interest-warner-losh-on-the-first-ten-years-of-unix>)

Author: Dave Cheney

Published: 2019-11-16T11:21:46Z

Content type: opinion

Language: en

Sources: [Dave Cheney](<https://devfeed.tech/sources/dave-cheney.md>)

Topics: [Unix](<https://devfeed.tech/topics/unix.md>)

Tags: [internets-of-interest](<https://devfeed.tech/tags/internets-of-interest.md>), [unix](<https://devfeed.tech/tags/unix.md>)

### AI overview

The article notes that UNIX turns 50 in 2019 and that 7th Edition Research UNIX is 40 years old.

### Source excerpt

UNIX turns 50 this year which means 7th edition Research UNIX is that 40.

## Use internal packages to reduce your public API surface

DevFeed: [Use internal packages to reduce your public API surface](<https://devfeed.tech/articles/use-internal-packages-to-reduce-your-public-api-surface-20820.md>)

Original publisher: [Read original article](<https://dave.cheney.net/2019/10/06/use-internal-packages-to-reduce-your-public-api-surface>)

Author: Dave Cheney

Published: 2019-10-06T04:43:54Z

Content type: article

Language: en

Sources: [Dave Cheney](<https://devfeed.tech/sources/dave-cheney.md>)

Topics: [Go Language](<https://devfeed.tech/topics/go-language.md>), [Tool](<https://devfeed.tech/topics/tool.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [code](<https://devfeed.tech/tags/code.md>), [go](<https://devfeed.tech/tags/go.md>), [library](<https://devfeed.tech/tags/library.md>), [pkg](<https://devfeed.tech/tags/pkg.md>), [programming](<https://devfeed.tech/tags/programming.md>), [project-layout](<https://devfeed.tech/tags/project-layout.md>)

### AI overview

This article explains how Go internal packages restrict imports to a defined directory tree, helping project authors keep implementation details out of the public API. Packages can later be promoted if the author chooses to support them publicly.

### Source excerpt

In the beginning, before the go tool, before Go 1.0, the Go distribution stored the standard library in a subdirectory called pkg/ and the commands which built upon it in cmd/. This wasn't so much a deliberate taxonomy but a by product of the original make based build system. In September 2014, the Go distribution [...]