1. -1

      Of course it had to be released under an “unlicense” which makes it largely not distributable :-(

      1. 3

        Could you elaborate? Why does this license make it not distributable?

        1. 2

          Well, The GNU Project is happy with it but there are some criticisms of the license, for example see this post on Stack Exchange.

          Update: The mailing list archive link in the Stack Exchange post above is incorrect - discussion is here.

          1. 4

            That post doesn’t really mention the reasons behind its claims. I’m a big supporter of Public Domain licensing. When evaluating CC0 vs Unlicense, I could only really find the mention of moral rights which are default copyright rights which are hard to intentionally relinquish:


            I chose Unlicense due to its simplicity and my personal belief that people are strawmanning that scenario

            1. 1

              IMO the biggest problem is that the license expects that jurisdictions that recognize copyright law, also have the concept of “Public Domain” which is not always the case, e.g. in Germany. For that reason, it will never be allowed to be used in larger German companies (for fear of being sued later).

              I used to use the Beerware license for my stuff, but switched to Expat/MIT for similar reasons.

      1. 1

        This is weird because it’s talking about two different things. Floating point values are imprecise, not too precise.

        I’d also argue against a date object being wrong for too much precision. He’s asking to compare it against a particular time. If you think it should have an implicit 23:59 in it, that breaks the other comparison for start time, and is way less sensible.

        1. 2

          Re: dates: well, you’re correct in the javascript model. But he seems to be imagining a model of dates and times where you have a “Date” concept and a separate “DateTime” concept. Then if I had start = Date{2016-10-01}, end = Date{2016-11-08}, time = DateTime{2016-11-08 08:00}, I’d expect time >= start to be true, and time <= end to be true as well, because when I compare a DateTime to a Date, they are “equal” if the Date part matches. In this model there’s no “implicit 23:59” involved.

          Dates and times are tricky, but I would find that model useful, since date inclusion like this is a common task.

          1. 3

            That model does not work well in practice, because of timezones.

            “December 15th, 2016” is a date on the calendar, “Dec. 15th, 2016, 4 PM” is a point on a timeline, but “Dec. 15th, 2016, 8PM UTC” is what people usually want for things like timestamps.

            The question' “Dec. 15th, 2016” contains the event that happened at “Dec. 15th, 2016 8PM UTC”‘ has many answers, dependent on context. If the context is “Dec. 15th, but in Japan”, the naive answer is no. If the context is “in UK”, the answer is yes. if the context is “In a timezone set by the user”, the answer depends.

            If you allow comparisons/operations between dates and datetimes you end up in situations where suddenly the difference between two dates isn’t 1 day, but 23 hours, so date_difference.days == 0 (happens in billing code if you naively use datetimes to track when people signed up to things, or to track plan validity intervals).

            The best (read: one where you have to be the most explicit) model is one where dates and datetimes are incomparable, and you instead have to explicitly convert “correctly”.

            1. 1

              That’s a good way to break the transitive property.

              start < time == true
              time < end == true
              start < end == false
              1. 2

                There is no meaningful < operator between a date and a date+time; a date is a range, and a time is a snapshot.

                You could compare the start of the date with a date+time, or the end.

          1. 5

            It strikes me as odd that nowhere in the project is “Gemfile” or “bundle” or “ruby” mentioned. Is this not directly inspired by bundler?

            1. 5

              The Basic Concept Gist linked from the readme has a mention of “simple.crate.io”, which leads me to suspect this is at least partially inspired by Rust’s package-manager Cargo.

              Cargo was inspired by Bundler, and I believe Mozilla even contracted some of the people who wrote Bundler to write Cargo, so there’s definitely a design heritage there, but obscure enough that it’s not called out particularly.

              It’s no longer “the way bundler does it”, it’s now “the way all sensible package-managers do it” — Bundler, Cargo, Yarn, and (apparently) soon Pip.

              1. 5

                Yes, the original builders of Bundler, Yehuda and Carl, wrote the initial implementation of Cargo.

              2. 1

                Only so much as it was inspired by “Dockerfile”, “Procfile”, “Makefile”, “Drakefile”, etc. I’m not sure it matters which came first anymore.

                1. 2

                  I expected mention of bundler because of the presence of the “.lock” file more than what the main filename is. AFAIK bundler was the first package manager to make use of the “lockfile” concept, which then was also built in to cargo, the package manager for rust, composer, the pm for PHP, the new pm for javascript yarn, etc.