Hi,<br><br>I&#39;ve just been badly bitten by some strange &#39;require&#39; behavior that took me several hours to track down. I don&#39;t know if it&#39;s a feature or a bug, but just in case let me share it. And if anyone has an explanation, that&#39;d be informative.<br>

<br>Long  story short: <br><br>If you &#39;raco link my-dir&#39; and sometimes (require my-dir/my-file) and other times (require &quot;my-file.rkt&quot;), you may get into trouble... if you run it via xinit (there may be other cases though).<br>

It looks like the two require forms makes my-file&#39;s &quot;visibility&quot; (or whatever the correct technical term is) differ.<br><br>Long story:<br><br>Say I have a module base.rkt exporting the parameter p with initial value &quot;base&quot;.<br>

base.rkt:<br>#lang racket/base<br>(provide p)<br>(define p (make-parameter &quot;base&quot;))<br><br>Module a.rkt (in the same directory) require&#39;s base.rkt, changes p value to &quot;a&quot;, and require&#39;s b.rkt.<br>

a.rkt:<br>#lang racket/base<br>(require &quot;base.rkt&quot; <br>         &quot;b.rkt&quot;)<br>(p &quot;a&quot;)<br>(printf &quot;p in a.rkt: ~a\n&quot; (p))<br>(b-print-p)<br><br>The required module b.rkt just prints the value of parameter p.<br>

b.rkt:<br>#lang racket/base<br>(require &quot;base.rkt&quot;)<br>(provide b-print-p)<br>(define (b-print-p)<br>  (printf &quot;p in b.rkt: ~a\n&quot; (p)))<br><br><br>Then if you simply:<br>$ racket a.rkt<br>things go as I would expect, i.e., it prints:<br>

p in a.rkt: a<br>p in b.rkt: a<br> which is fine.<br><br>Now do the following:<br>- Let A be the directory which contains a.rkt, b.rkt, and base.rkt. Do:<br>$ raco link A <br>in A&#39;s parent directory.<br>- In file b.rkt (and only in b.rkt), change (require &quot;base.rkt&quot;) to (require A/base)<br>

- write (and this is necessary apparently):<br>racket a.rkt <br>in you .xinitrc file (as the only  line)<br><br>Now if on a login shell you type:<br>$ xinit -- :1<br>you should get:<br>p in a.rkt: a<br>p in b.rkt: base<br>

 which does not look fine.<br><br>Notes:<br><br>If you try:<br>$ racket a.rkt<br>You have the correct &quot;a\na&quot; output.<br><br>Also, if you replace &quot;base.rkt&quot; by A/base in a.rkt, all is fine too.<br><br>
Laurent<br>