 
     * `:id` - any term used to identify the child specification internally by
       the supervisor; defaults to the given module. This key is required.
-      For Supervisors, in the case of conflicting `:id` values, the supervisor
+      For supervisors, in the case of conflicting `:id` values, the supervisor
       will refuse to initialize and require explicit IDs. This is not the case
-      for DynamicSupervisors though.
+      for [dynamic supervisors](`DynamicSupervisor`) though.
 
     * `:start` - a tuple with the module-function-args to be invoked
       to start the child process. This key is required.

      many other cases, especially when you want to pass a list of options
      to the child process

  If you need to convert a tuple or a module child specification to a map or
  modify a child specification, you can use the `Supervisor.child_spec/2` function.
  For example, to run the counter with a different `:id` and a `:shutdown` value of
  10 seconds (10_000 milliseconds):


  section in the `GenServer` module docs.
  """

  # It is important to keep the two-arity spec because it is a catch-all
  # to start_link(children, options).
  @spec start_link(module, term) :: on_start
  @spec start_link(module, term, [option]) :: on_start
  def start_link(module, init_arg, options \\ []) when is_list(options) do
