tablecheck / prawn-continued

Fast, Nimble PDF Writer for Ruby
https://prawnpdf.org
Other
6 stars 0 forks source link

Good Fork #7

Closed pointlessone closed 1 year ago

pointlessone commented 1 year ago

My congratulations on the fork!

There are a few matters I'd like to inform you of.

Name

It'd be great if you came up with a completely unrelated name to remove any sort of confusion. Like libav and ffmpeg. I believe less confusion would be better for everyone: this fork, Prawn, migrating users, and anyone who doesn't use projects directly but have them as a transitive dependencies.

You definitely can not use Prawn name. This is in the license which this fork still has to adhere to.

But if you think you must use Prawn in the name (you don't but if you think that anyway) then at the very least replace dash with underscore (e.g. prawn_continued). It's a convention to use dashes for extension/plug-in gems. For example, prawn-table implies that it's a table extension for prawn. For multiple words it's customary to use underscores. These dashes and underscores also translate into names of files and objects in a consistent way. For file names dashes translate into path separators (e.g. prawn-table becomes prawn/table). For object names underscored parts become camel-cased and dashed become :: denoting namespacing (e.g. prawn_continued-table becomes PrawnContinued::Table). All this is described in detail in Name Your Gem RubyGems guide.

Side note: you can use Prawn in, say, ReadMe to explain the context of the fork but not much more.

Drop-in replacement

Given the point above you should use a different top-level namespace for the code.

You still can have drop-in replacement implemented by adding a compatibility adapter. One way to do it is to have a file that your end users would require manually. In it this fork can alias Prawn top namespace if you're confident you're 100% compatible.

require 'my_awesome_fork'

Prawn = MyAwesomeFork

This approach is beneficial in that when with time this fork might diverge, it can provide a more elaborate compatibility layer for users who are migrating from Prawn to this fork.

Note that this adapter should be manually required to avoid potential conflicts, especially in transitive dependencies.

Transition

Again related to the name. It takes time and effort to come up with a new name and prepare a proper gem. I understand the use of Prawn's name during that period in the unreleased code (as in a packaged gem) in this repo.

However, currently released gem does not follow conventions and is in conflict with Prawn license. I suggest you yank the gem from RubyGems that has all these issues. Follow through with the transition and then push a new gem under a new name and with good code.

If you decide to keep the name (with underscore) I think it's prudent to keep the current name reserved but with no gems released under that name to avoid confusion.

If you come up with a sufficiently different name I kindly ask you to release the name for use by a possible Prawn extension with name "Continued".

Logo

Prawn's logo is not FOSS. I believe it belongs to Gregory Brown. Prawn community has permission to use it. GitHub forks are generally considered a part of community but since this is very explicitly a project fork I kindly ask you to remove the logo or obtain permission to use it from its owner.

Photo

There's also a photo of Gregory in the repo. Gregory himself added it to the repo at the time he was an active Prawn maintainer. However I don't know how he would feel about association with this fork. I suggest you ask him about using that photo or replace it.

Table

I see you also forked prawn-table, too. Everything I said about naming above applies to it as well.

Dependencies

Prawn has a few dependencies. You probably should consider forking those as well. Again, with everything about naming applying here too.

TTFunk is somewhat stand-alone but is extensively used in Prawn. Quite a few bugs reported and features requested in Prawn are actually TTFunk's responsibility. You can choose to contribute to TTFunk, I have no issues with that.

pdf-core is very coupled to Prawn. Many features (and bugs) are spread across both and require changes in both simultaneously.

I will not take into account existence of forks in my maintainership of those gems. Any change in those can break this fork at any time. I think it's self-evident but now I know you know, I did my part to help you.

johnnyshields commented 1 year ago

@pointlessone

Re: logo and photo, as a gesture of goodwill, I will remove those. I have raised a separate ticket for that.

Regarding licensing aspects of gem name / top-level namespace, you are incorrect. Here are the exact relevant terms of the Prawn license for those interested. Note the GPLv2 and GPLv3 say nothing about naming.

  1. You may make and give away verbatim copies of the source form of the
     software without restriction, provided that you duplicate all of the
     original copyright notices and associated disclaimers.

        ==> prawn-continued is compliant, all of the original copyright notices are included.

  2. You may modify your copy of the software in any way, provided that
     you do at least ONE of the following:

        ==> Note wording "at least ONE"

       a) place your modifications in the Public Domain or otherwise
          make them Freely Available, such as by posting said
    modifications to Usenet or an equivalent medium, or by allowing
    the author to include your modifications in the software.

        ==> prawn-continued is complying with 2a. Therefore it does not need to comply with 2b-d.

       b - d) (irrelevant)

  3. You may distribute the software in object code or executable
     form, provided that you do at least ONE of the following:

       ==> Note wording "at least ONE"

       a) distribute the executables and library files of the software,
    together with instructions (in the manual page or equivalent)
    on where to get the original distribution.

        ==> prawn-continued is complying with 3a. Therefore it does not need to comply with 3b-d.

       b - d) (irrelevant)

(Sections 4-6 do not impose any additional restrictions on use.)

Beyond this, we have made a good faith effort at the top of README to make clear the purpose of this gem and its distinction from the original prawn. The very name prawn-continued implies this as well.

I have noted your other points and will take them into consideration.

Lastly, please consider devoting half as much time as you did writing the above message to maintaining the original prawn gem and/or finding a suitable co-maintainer. Then this fork would be entirely unnecessary. I too wish I could be devoting my effort to maintaining the original Prawn and not a fork.

johnnyshields commented 1 year ago

Image issue has been resolved: https://github.com/tablecheck/prawn-continued/pull/9